Skip to content

Conversation

@floatlesss
Copy link
Contributor

Description

Adds install-taglib.sh and modifies devcontainer.json (into .devcontainer/) to run install-taglib.sh as a postCreateCommand.

^This effectively (as tested) downloads and installs TagLib from https://github.com/navidrome/cross-taglib for amd64 or arm64 architectures inside of a VS Code Dev Container.

Related Issues

Fixes #4749

Type of Change

  • Bug fix
  • New feature
  • Documentation update
  • Refactor
  • Other (please describe):

Checklist

Please review and check all that apply:

  • My code follows the project’s coding style
  • I have tested the changes locally
  • I have added or updated documentation as needed
  • I have added tests that prove my fix/feature works (or explain why not)
  • All existing and new tests pass

How to Test

  1. Use git to clone Navidrome (after my commit has been implemented)
  2. Open the cloned repository locally in VS Code
  3. Install the Dev Containers extension, if it's not installed already
  4. Open the repository as a Dev Container
  5. Observe that after VS Code builds the container, then a postCreateCommand installs TagLib inside the container using install-taglib.sh (into the /usr directory)
  6. Try running make setup && make build, (hopefully) no errors due to missing TagLib headers will arise.

Additional Notes

  • Please note that install-taglib.sh installs TagLib into the /usr directory of the container, making TagLib globally accessible to any user inside of the container.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @floatlesss, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request streamlines the development environment setup for Navidrome by resolving persistent TagLib dependency issues within VS Code Dev Containers. It introduces an automated script that detects the container's architecture, downloads the appropriate TagLib binaries, and installs them globally, ensuring a consistent and functional build environment for developers.

Highlights

  • Automated TagLib Installation: Introduces a new script, install-taglib.sh, to automatically download and install TagLib within the Dev Container.
  • Dev Container Integration: Configures devcontainer.json to execute install-taglib.sh as a postCreateCommand, ensuring TagLib is set up upon container creation.
  • Architecture Support: The installation script supports both amd64 and arm64 architectures, fetching the correct TagLib build from navidrome/cross-taglib.
  • Dependency Resolution: Addresses and fixes build issues related to missing TagLib headers, specifically fixing navidrome#4749.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@floatlesss floatlesss changed the title fix(vscodedevcontainer): fix-taglib-build-issues - navidrome#4749 fix(vscodedevcontainer): fix-navidrome-build-issues-taglib - navidrome#4749 Nov 29, 2025
@floatlesss floatlesss changed the title fix(vscodedevcontainer): fix-navidrome-build-issues-taglib - navidrome#4749 fix(vscodedevcontainer): fix-navidrome-build-issues (taglib) - navidrome#4749 Nov 29, 2025
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a script to install TagLib within the VS Code development container, addressing build issues. The approach is sound and effectively resolves the problem. I've added a few suggestions to the install-taglib.sh script to enhance its robustness and ensure proper cleanup, such as using set -euo pipefail, redirecting error output, and removing the empty directory after moving its contents. Overall, this is a good fix.

floatlesss and others added 2 commits November 30, 2025 20:57
Signed-off-by: floatlesss <117862164+floatlesss@users.noreply.github.com>
Move TagLib installation from postCreateCommand script into the devcontainer Dockerfile to leverage Docker layer caching and simplify setup.\n\nChanges:\n- Install cross-taglib v2.1.1-1 directly in Dockerfile using TARGETARCH for multi-arch support (amd64/arm64).\n- Remove redundant libtag1-dev apt dependency; keep ffmpeg only.\n- Add CROSS_TAGLIB_VERSION as a build arg for consistency with CI/Makefile.\n- Remove postCreateCommand from devcontainer.json and delete install-taglib.sh script.\n\nWhy:\n- Avoid re-downloading TagLib on each container create; benefit from cached image layers.\n- Reduce redundancy and potential version mismatch between apt libtag and cross-taglib.\n- Keep devcontainer aligned with production build approach and CI settings.
@deluan
Copy link
Member

deluan commented Dec 2, 2025

Hey, thanks for this. I experimented moving the TagLib installation to the Dockerfile, instead of using an external script. It worked on ARM. Can you try on your system?

Here are the changes: 342b9eb

@floatlesss
Copy link
Contributor Author

floatlesss commented Dec 2, 2025

Hey, thanks for this. I experimented moving the TagLib installation to the Dockerfile, instead of using an external script. It worked on ARM. Can you try on your system?

Here are the changes: 342b9eb

Can confirm that your changes work on amd64. Dev container builds successfully, and so does Navidrome.
Nice!

@deluan deluan merged commit 3ac2c6b into navidrome:master Dec 2, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: (dev) *make build* fails in vscode-dev-containers due to an outdated/incomplete version of taglib

2 participants