diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000000..b03018b533a --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,35 @@ +FROM mcr.microsoft.com/devcontainers/base:debian + +USER root +RUN rm -rf /bin/sh && ln -s /bin/bash /bin/sh + +# Creates a helper for installing packages leaving no traces behind +RUN cat > "/usr/sbin/install_packages" <<-'EOF' +#!/bin/bash +set -e +set -u +export DEBIAN_FRONTEND=noninteractive +n=0 +max=2 +until [ $n -gt $max ]; do + set +e + ( + apt update -qq && + apt install -y --no-install-recommends "$@" + ) + CODE=$? + set -e + if [ $CODE -eq 0 ]; then + break + fi + if [ $n -eq $max ]; then + exit $CODE + fi + echo "apt failed, retrying" + n=$(($n + 1)) +done +rm -r /var/lib/apt/lists /var/cache/apt/archives +EOF && chmod 0755 "/usr/sbin/install_packages" + +# Installs Node.js +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo bash && install_packages nodejs \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index e72ee22b04d..acaf64d883f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,6 +1,8 @@ { "name": "jellyfin-vue Codespace (with support for Tauri and Docker development)", - "image": "node:20-slim", + "build": { + "dockerfile": "Dockerfile" + }, "features": { "ghcr.io/devcontainers/features/rust:1": { "profile": "default" @@ -8,7 +10,6 @@ "ghcr.io/devcontainers/features/docker-in-docker:2": { "installDockerComposeSwitch": false }, - "ghcr.io/eitsupi/devcontainer-features/jq-likes:2": {}, "ghcr.io/devcontainers/features/github-cli:1": {} }, "forwardPorts": [3000], @@ -19,12 +20,10 @@ } }, "postCreateCommand": { - "npm": "npm ci --no-audit", - "no-yarn": "unset YARN_VERSION && rm -rf /opt/yarn*", - "use-bash": "rm -rf /bin/sh && ln -s /bin/bash /bin/sh", - "git-config": "git config --global core.editor 'code --wait'", - "postunpack": ".devcontainer/postunpack.sh" + "postunpack": "install_packages $(cat packaging/tauri/apt_packages)" + }, + "postAttachCommand": { + "install-extensions": "cat .vscode/extensions.json | jq -r .recommendations[] | xargs -n 1 code --install-extension" }, - "postAttachCommand": "cat .vscode/extensions.json | jq -r .recommendations[] | xargs -n 1 code --install-extension", "hostRequirements": { "cpus": 4, "memory": "8gb" } } diff --git a/.devcontainer/postunpack.sh b/.devcontainer/postunpack.sh deleted file mode 100755 index 017bfd666d1..00000000000 --- a/.devcontainer/postunpack.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -## Install Tauri dependencies -apt update -apt install -y --no-install-recommends $(cat packaging/tauri/apt_packages) -rm -rf /var/lib/apt/lists /var/cache/apt/archives