From 3b0622021996ba9c0001310136ef56354ca18986 Mon Sep 17 00:00:00 2001 From: Zer0x00 Date: Tue, 14 Jan 2025 03:42:32 +0100 Subject: [PATCH] feat: Upgrade devcontainer setup (#14419) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Feat: Upgrade devcontainer * Style: Format devcontainer.json * Chore: Remove settings from devcontainer * chore: add shebang * chore: fix shellcheck --------- Co-authored-by: Bünyamin Olgun Co-authored-by: Jason Rasmussen --- .devcontainer/.gitignore | 2 ++ .devcontainer/Dockerfile | 14 ++++++++ .devcontainer/devcontainer.json | 42 ++++++++++++---------- .devcontainer/docker-compose.yml | 8 +++++ .devcontainer/scripts/initializeCommand.sh | 6 ++++ .devcontainer/scripts/onCreateCommand.sh | 25 +++++++++++++ 6 files changed, 79 insertions(+), 18 deletions(-) create mode 100644 .devcontainer/.gitignore create mode 100644 .devcontainer/docker-compose.yml create mode 100644 .devcontainer/scripts/initializeCommand.sh create mode 100644 .devcontainer/scripts/onCreateCommand.sh diff --git a/.devcontainer/.gitignore b/.devcontainer/.gitignore new file mode 100644 index 0000000000..6bf3b5d9e5 --- /dev/null +++ b/.devcontainer/.gitignore @@ -0,0 +1,2 @@ +.env +library \ No newline at end of file diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 9ae47b9375..a107c1ac3a 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,2 +1,16 @@ ARG BASEIMAGE=mcr.microsoft.com/devcontainers/typescript-node:22@sha256:9791f4aa527774bc370c6bd2f6705ce5a686f1e6f204badd8dfaacce28c631ae FROM ${BASEIMAGE} + +# Flutter SDK +# https://flutter.dev/docs/development/tools/sdk/releases?tab=linux +ENV FLUTTER_CHANNEL="stable" +ENV FLUTTER_VERSION="3.24.5" +ENV FLUTTER_HOME=/flutter +ENV PATH=${PATH}:${FLUTTER_HOME}/bin + +# Flutter SDK +RUN mkdir -p ${FLUTTER_HOME} \ + && curl -C - --output flutter.tar.xz https://storage.googleapis.com/flutter_infra_release/releases/${FLUTTER_CHANNEL}/linux/flutter_linux_${FLUTTER_VERSION}-${FLUTTER_CHANNEL}.tar.xz \ + && tar -xf flutter.tar.xz --strip-components=1 -C ${FLUTTER_HOME} \ + && rm flutter.tar.xz \ + && chown -R 1000:1000 ${FLUTTER_HOME} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b297f9a2d8..2d567f033a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,20 +1,26 @@ { - "name": "Immich devcontainers", - "build": { - "dockerfile": "Dockerfile", - "args": { - "BASEIMAGE": "mcr.microsoft.com/devcontainers/typescript-node:22" - } - }, - "customizations": { - "vscode": { - "extensions": [ - "svelte.svelte-vscode" - ] - } - }, - "forwardPorts": [], - "postCreateCommand": "make install-all", - "remoteUser": "node" + "name": "Immich", + "service": "immich-devcontainer", + "dockerComposeFile": [ + "docker-compose.yml", + "../docker/docker-compose.dev.yml" + ], + "customizations": { + "vscode": { + "extensions": [ + "Dart-Code.dart-code", + "Dart-Code.flutter", + "dbaeumer.vscode-eslint", + "dcmdev.dcm-vscode-extension", + "esbenp.prettier-vscode", + "svelte.svelte-vscode" + ] + } + }, + "forwardPorts": [], + "initializeCommand": "bash .devcontainer/scripts/initializeCommand.sh", + "onCreateCommand": "bash .devcontainer/scripts/onCreateCommand.sh", + "overrideCommand": true, + "workspaceFolder": "/immich", + "remoteUser": "node" } - diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000000..25719641d2 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,8 @@ +services: + immich-devcontainer: + build: + dockerfile: Dockerfile + extra_hosts: + - 'host.docker.internal:host-gateway' + volumes: + - ..:/immich:cached diff --git a/.devcontainer/scripts/initializeCommand.sh b/.devcontainer/scripts/initializeCommand.sh new file mode 100644 index 0000000000..9d9d196696 --- /dev/null +++ b/.devcontainer/scripts/initializeCommand.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# If .env file does not exist, create it by copying example.env from the docker folder +if [ ! -f ".devcontainer/.env" ]; then + cp docker/example.env .devcontainer/.env +fi diff --git a/.devcontainer/scripts/onCreateCommand.sh b/.devcontainer/scripts/onCreateCommand.sh new file mode 100644 index 0000000000..2f898ec32e --- /dev/null +++ b/.devcontainer/scripts/onCreateCommand.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Enable multiarch for arm64 if necessary +if [ "$(dpkg --print-architecture)" = "arm64" ]; then + sudo dpkg --add-architecture amd64 && \ + sudo apt-get update && \ + sudo apt-get install -y --no-install-recommends \ + qemu-user-static \ + libc6:amd64 \ + libstdc++6:amd64 \ + libgcc1:amd64 +fi + +# Install DCM +wget -qO- https://dcm.dev/pgp-key.public | sudo gpg --dearmor -o /usr/share/keyrings/dcm.gpg +sudo echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list + +sudo apt-get update +sudo apt-get install dcm + +dart --disable-analytics + +# Install immich +cd /immich || exit +make install-all