From 60fb0979af9e9efcdbf33fe4c86e0131c4d15424 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sat, 17 Feb 2024 09:45:37 +0000 Subject: [PATCH 01/23] feat: add image variant with vscode specific settings --- .github/workflows/build-push.yml | 69 +++++++++++++++++++------- .github/workflows/cleanup-pr-image.yml | 7 +++ 2 files changed, 57 insertions(+), 19 deletions(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 332c9520..1f4d4d91 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -31,8 +31,18 @@ jobs: steps: - uses: sigstore/cosign-installer@e1523de7571e31dbe865fd2e80c5c7c23ae71eb4 # v3.4.0 if: ${{ github.event_name != 'merge_group' }} + - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 + - uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 + with: + version: v0.12.1 + - uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 + if: ${{ github.event_name != 'merge_group' }} + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 - id: meta + id: metadata-base env: DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index with: @@ -45,43 +55,64 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 - - uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 + - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 + id: build-and-push-base with: - version: v0.12.0 - - uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 - if: ${{ github.event_name != 'merge_group' }} + file: .devcontainer/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'merge_group' }} + tags: ${{ steps.metadata-base.outputs.tags }} + labels: ${{ steps.metadata-base.outputs.labels }} + annotations: ${{ steps.metadata-base.outputs.annotations }} + sbom: true + provenance: true + cache-from: type=gha + cache-to: type=gha,mode=max + - uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 + id: metadata-vscode + env: + DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + images: ${{ env.REGISTRY }}/${{ github.repository }}-vscode + # Generate Docker tags based on the following events/attributes + tags: | + type=raw,value=latest,enable={{is_default_branch}} + type=ref,event=pr + type=semver,pattern={{raw}} + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 - id: build-and-push + id: build-and-push-vscode with: file: .devcontainer/Dockerfile platforms: linux/amd64,linux/arm64 push: ${{ github.event_name != 'merge_group' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - annotations: ${{ steps.meta.outputs.annotations }} + tags: ${{ steps.metadata-vscode.outputs.tags }} + labels: | + ${{ steps.metadata-vscode.outputs.labels }} + devcontainer.metadata=[{ "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" } }] + annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true cache-from: type=gha - cache-to: type=gha,mode=max - uses: anchore/sbom-action@b6a39da80722a2cb0ef5d197531764a89b5d48c3 # v0.15.8 - if: ${{ steps.build-and-push.outputs.digest != '' && github.event_name != 'merge_group' }} + if: ${{ steps.build-and-push-base.outputs.digest != '' && github.event_name != 'merge_group' }} with: - image: ${{ env.REGISTRY }}/${{ github.repository }}@${{ steps.build-and-push.outputs.digest }} + image: ${{ env.REGISTRY }}/${{ github.repository }}@${{ steps.build-and-push-base.outputs.digest }} dependency-snapshot: true - uses: actions/dependency-review-action@80f10bf419f34980065523f5efca7ebed17576aa # v4.1.0 if: ${{ github.event_name == 'pull_request' }} with: comment-summary-in-pr: on-failure fail-on-severity: critical - - name: Sign the image with GitHub OIDC token + - name: Sign the images with GitHub OIDC token if: ${{ github.event_name != 'merge_group' }} # This step uses the GitHub OIDC identity token to provision an ephemeral certificate # against the sigstore community Fulcio instance. env: - DIGEST: ${{ steps.build-and-push.outputs.digest }} - run: cosign sign --yes --recursive "${{ env.REGISTRY }}/${{ github.repository }}@${DIGEST}" + DIGEST_BASE: ${{ steps.build-and-push-base.outputs.digest }} + DIGEST_VSCODE: ${{ steps.build-and-push-vscode.outputs.digest }} + run: | + cosign sign --yes --recursive "${{ env.REGISTRY }}/${{ github.repository }}@${DIGEST_BASE}" + cosign sign --yes --recursive "${{ env.REGISTRY }}/${{ github.repository }}@${DIGEST_VSCODE}" diff --git a/.github/workflows/cleanup-pr-image.yml b/.github/workflows/cleanup-pr-image.yml index 047302d7..7043cb48 100644 --- a/.github/workflows/cleanup-pr-image.yml +++ b/.github/workflows/cleanup-pr-image.yml @@ -23,9 +23,16 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - run: cosign clean -f --type=signature "${{ env.REGISTRY }}/${{ github.repository }}:pr-${{ github.event.pull_request.number }}" + - run: cosign clean -f --type=signature "${{ env.REGISTRY }}/${{ github.repository }}-vscode:pr-${{ github.event.pull_request.number }}" - uses: bots-house/ghcr-delete-image-action@3827559c68cb4dcdf54d813ea9853be6d468d3a4 # v1.1.0 with: owner: ${{ github.repository_owner }} name: ${{ github.event.repository.name }} token: ${{ secrets.GITHUB_TOKEN }} tag: pr-${{ github.event.pull_request.number }} + - uses: bots-house/ghcr-delete-image-action@3827559c68cb4dcdf54d813ea9853be6d468d3a4 # v1.1.0 + with: + owner: ${{ github.repository_owner }} + name: ${{ github.event.repository.name }}-vscode + token: ${{ secrets.GITHUB_TOKEN }} + tag: pr-${{ github.event.pull_request.number }} From 108a375bad7781659896514c65d9844aa67d94a6 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sat, 17 Feb 2024 09:56:51 +0000 Subject: [PATCH 02/23] chore: fix sign command for vscode container --- .github/workflows/build-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 1f4d4d91..55ca4fda 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -115,4 +115,4 @@ jobs: DIGEST_VSCODE: ${{ steps.build-and-push-vscode.outputs.digest }} run: | cosign sign --yes --recursive "${{ env.REGISTRY }}/${{ github.repository }}@${DIGEST_BASE}" - cosign sign --yes --recursive "${{ env.REGISTRY }}/${{ github.repository }}@${DIGEST_VSCODE}" + cosign sign --yes --recursive "${{ env.REGISTRY }}/${{ github.repository }}-vscode@${DIGEST_VSCODE}" From cf595ee4a93f91eaccf2b0a761aebb3f89992d4b Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sat, 17 Feb 2024 09:57:29 +0000 Subject: [PATCH 03/23] chore(devcontainer.json): remove unnecessary properties for this container --- .devcontainer/devcontainer.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 83d0bd26..1dd231d1 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,8 +3,6 @@ "dockerfile": "Dockerfile", "context": ".." }, - "runArgs": ["--add-host=host.docker.internal:host-gateway"], - "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" }, "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" ], From 35b27f06a6d24f4242b63419ce909a14c0180080 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sat, 17 Feb 2024 12:33:04 +0000 Subject: [PATCH 04/23] chore: externalize metadata and extend contents --- .../devcontainer-metadata-vscode.json | 33 +++++++++++++++++++ .github/workflows/build-push.yml | 4 ++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/devcontainer-metadata-vscode.json diff --git a/.devcontainer/devcontainer-metadata-vscode.json b/.devcontainer/devcontainer-metadata-vscode.json new file mode 100644 index 00000000..5cd6e25a --- /dev/null +++ b/.devcontainer/devcontainer-metadata-vscode.json @@ -0,0 +1,33 @@ +[ + { + "customizations": { + "vscode": { + "extensions": [ + "llvm-vs-code-extensions.vscode-clangd@0.1.25", + "marus25.cortex-debug@1.12.1", + "matepek.vscode-catch2-test-adapter@4.7.0", + "mhutchie.git-graph@1.30.0", + "ms-vscode.cmake-tools@1.16.32", + "ms-vscode.cpptools@1.18.5", + "ms-vsliveshare.vsliveshare@1.0.5900", + "SonarSource.sonarlint-vscode@4.1.0", + "xaver.clang-format@1.9.0" + ], + "settings": { + "C_Cpp.intelliSenseEngine": "disabled", + "C_Cpp.formatting": "clangFormat", + "clangd.arguments": [ + "--query-driver=/**/arm-none-eabi-*", + "--compile-commands-dir=${workspaceFolder}/.amp" + ], + "cmake.copyCompileCommands": "${workspaceFolder}/.amp/compile_commands.json", + "cortex-debug.gdbPath": "gdb-multiarch", + "cortex-debug.objdumpPath": "arm-none-eabi-objdump", + "sonarlint.pathToCompileCommands": "${workspaceFolder}/.amp/compile_commands.json" + } + } + }, + "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" }, + "runArgs": ["--add-host=host.docker.internal:host-gateway"] + } +] diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 55ca4fda..b6054b8c 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -82,6 +82,8 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} + - run: echo "metadata=$(jq -cj '.' .devcontainer/devcontainer-metadata-vscode.json)" >> "$GITHUB_OUTPUT" + id: devcontainer-metadata - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 id: build-and-push-vscode with: @@ -91,7 +93,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=[{ "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" } }] + devcontainer.metadata=${{ steps.devcontainer-metadata.outputs.metadata }} annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 658b65b7f1bd889de3a78c4a4ffd850d4a48c7b1 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sat, 17 Feb 2024 12:37:30 +0000 Subject: [PATCH 05/23] ci: add checkout step to build-push --- .github/workflows/build-push.yml | 3 +++ .github/workflows/ci.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index b6054b8c..f4571d2a 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -29,6 +29,9 @@ jobs: # with sigstore/fulcio when running outside of PRs. id-token: write steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + persist-credentials: false - uses: sigstore/cosign-installer@e1523de7571e31dbe865fd2e80c5c7c23ae71eb4 # v3.4.0 if: ${{ github.event_name != 'merge_group' }} - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a545c8ab..20c6ae8c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,8 @@ jobs: # While the docker/build-push-action works from the Git context, we still need # the checkout step for running our tests. - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + persist-credentials: false - uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 with: From a4e62126ef22937c83b3ac2e480a80e83fae9db4 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sat, 17 Feb 2024 12:49:54 +0000 Subject: [PATCH 06/23] chore: quote label data --- .github/workflows/build-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index f4571d2a..431569d2 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -96,7 +96,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=${{ steps.devcontainer-metadata.outputs.metadata }} + devcontainer.metadata='${{ steps.devcontainer-metadata.outputs.metadata }}' annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From fd99d7e2370729d7c3eb5f8598f208ab9527c907 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sat, 17 Feb 2024 13:14:29 +0000 Subject: [PATCH 07/23] chore: simplify devcontainer-metadata-vscode.json --- .../devcontainer-metadata-vscode.json | 30 +------------------ .github/workflows/build-push.yml | 2 +- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/.devcontainer/devcontainer-metadata-vscode.json b/.devcontainer/devcontainer-metadata-vscode.json index 5cd6e25a..13908b1b 100644 --- a/.devcontainer/devcontainer-metadata-vscode.json +++ b/.devcontainer/devcontainer-metadata-vscode.json @@ -1,33 +1,5 @@ [ { - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd@0.1.25", - "marus25.cortex-debug@1.12.1", - "matepek.vscode-catch2-test-adapter@4.7.0", - "mhutchie.git-graph@1.30.0", - "ms-vscode.cmake-tools@1.16.32", - "ms-vscode.cpptools@1.18.5", - "ms-vsliveshare.vsliveshare@1.0.5900", - "SonarSource.sonarlint-vscode@4.1.0", - "xaver.clang-format@1.9.0" - ], - "settings": { - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.formatting": "clangFormat", - "clangd.arguments": [ - "--query-driver=/**/arm-none-eabi-*", - "--compile-commands-dir=${workspaceFolder}/.amp" - ], - "cmake.copyCompileCommands": "${workspaceFolder}/.amp/compile_commands.json", - "cortex-debug.gdbPath": "gdb-multiarch", - "cortex-debug.objdumpPath": "arm-none-eabi-objdump", - "sonarlint.pathToCompileCommands": "${workspaceFolder}/.amp/compile_commands.json" - } - } - }, - "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" }, - "runArgs": ["--add-host=host.docker.internal:host-gateway"] + "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" } } ] diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 431569d2..f4571d2a 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -96,7 +96,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata='${{ steps.devcontainer-metadata.outputs.metadata }}' + devcontainer.metadata=${{ steps.devcontainer-metadata.outputs.metadata }} annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 72f42ae1e3bfabde50ab8f66bbf76e65312a2798 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 12:22:33 +0000 Subject: [PATCH 08/23] chore: add back one extension --- .devcontainer/devcontainer-metadata-vscode.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer-metadata-vscode.json b/.devcontainer/devcontainer-metadata-vscode.json index 13908b1b..0c335504 100644 --- a/.devcontainer/devcontainer-metadata-vscode.json +++ b/.devcontainer/devcontainer-metadata-vscode.json @@ -1,5 +1,12 @@ [ { - "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" } + "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" }, + "customizations": { + "vscode": { + "extensions": [ + "mhutchie.git-graph@1.30.0" + ] + } + } } ] From dbc18a8ead6f5a7797cb34eb8533d8b007833726 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 12:47:33 +0000 Subject: [PATCH 09/23] chore: add more plug-ins --- .devcontainer/devcontainer-metadata-vscode.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer-metadata-vscode.json b/.devcontainer/devcontainer-metadata-vscode.json index 0c335504..14e9c8d2 100644 --- a/.devcontainer/devcontainer-metadata-vscode.json +++ b/.devcontainer/devcontainer-metadata-vscode.json @@ -4,7 +4,15 @@ "customizations": { "vscode": { "extensions": [ - "mhutchie.git-graph@1.30.0" + "llvm-vs-code-extensions.vscode-clangd@0.1.25", + "marus25.cortex-debug@1.12.1", + "matepek.vscode-catch2-test-adapter@4.7.0", + "mhutchie.git-graph@1.30.0", + "ms-vscode.cmake-tools@1.16.32", + "ms-vscode.cpptools@1.18.5", + "ms-vsliveshare.vsliveshare@1.0.5900", + "SonarSource.sonarlint-vscode@4.1.0", + "xaver.clang-format@1.9.0" ] } } From 194f1a76a338e9a5135da44ea514d2d283d58cd5 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 13:33:01 +0000 Subject: [PATCH 10/23] chore: try to fix array escaping --- .github/workflows/build-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index f4571d2a..8dee4de5 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -96,7 +96,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=${{ steps.devcontainer-metadata.outputs.metadata }} + devcontainer.metadata=${{ fromJson(steps.devcontainer-metadata.outputs.metadata) }} annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 5ecad2e4982534b87c104ae35b97d27b478649a6 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 13:42:54 +0000 Subject: [PATCH 11/23] chore: use jq tostring to convert json to label --- .github/workflows/build-push.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 8dee4de5..68a0f342 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -85,7 +85,7 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - - run: echo "metadata=$(jq -cj '.' .devcontainer/devcontainer-metadata-vscode.json)" >> "$GITHUB_OUTPUT" + - run: echo "metadata=$(jq tostring .devcontainer/devcontainer-metadata-vscode.json)" >> "$GITHUB_OUTPUT" id: devcontainer-metadata - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 id: build-and-push-vscode @@ -96,7 +96,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=${{ fromJson(steps.devcontainer-metadata.outputs.metadata) }} + devcontainer.metadata=${{ steps.devcontainer-metadata.outputs.metadata }} annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 6985e5c3a27454cedb1dbf4cfc03cb3753e898ca Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 13:52:22 +0000 Subject: [PATCH 12/23] chore: debug json magic --- .github/workflows/build-push.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 68a0f342..c87741af 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -87,6 +87,9 @@ jobs: type=semver,pattern={{major}} - run: echo "metadata=$(jq tostring .devcontainer/devcontainer-metadata-vscode.json)" >> "$GITHUB_OUTPUT" id: devcontainer-metadata + - run: | + echo ${{ steps.devcontainer-metadata.outputs.metadata }} + echo ${{ toJson(steps.devcontainer-metadata.outputs.metadata) }} - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 id: build-and-push-vscode with: @@ -96,7 +99,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=${{ steps.devcontainer-metadata.outputs.metadata }} + devcontainer.metadata=${{ toJson(steps.devcontainer-metadata.outputs.metadata) }} annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 32797e3a40512413c8bd85b08dc3d9388b53eb36 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 14:00:55 +0000 Subject: [PATCH 13/23] chore: escape, quote, unescape, doule escape... for victory --- .github/workflows/build-push.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index c87741af..90f13cc2 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -85,11 +85,8 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - - run: echo "metadata=$(jq tostring .devcontainer/devcontainer-metadata-vscode.json)" >> "$GITHUB_OUTPUT" + - run: echo "metadata=$(jq -cj '.' .devcontainer/devcontainer-metadata-vscode.json)" >> "$GITHUB_OUTPUT" id: devcontainer-metadata - - run: | - echo ${{ steps.devcontainer-metadata.outputs.metadata }} - echo ${{ toJson(steps.devcontainer-metadata.outputs.metadata) }} - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 id: build-and-push-vscode with: From 13fa2f0fcacbc322a8e97a770c7aac4396ffcfb3 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 15:00:45 +0000 Subject: [PATCH 14/23] chore: hard-code metadata for now, I give up --- .github/workflows/build-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 90f13cc2..73a43c41 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -96,7 +96,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=${{ toJson(steps.devcontainer-metadata.outputs.metadata) }} + devcontainer.metadata=[{"remoteEnv":{"LOCAL_WORKSPACE_FOLDER":"${localWorkspaceFolder}"},"customizations":{"vscode":{"extensions":["llvm-vs-code-extensions.vscode-clangd@0.1.25","marus25.cortex-debug@1.12.1","matepek.vscode-catch2-test-adapter@4.7.0","mhutchie.git-graph@1.30.0","ms-vscode.cmake-tools@1.16.32","ms-vscode.cpptools@1.18.5","ms-vsliveshare.vsliveshare@1.0.5900","SonarSource.sonarlint-vscode@4.1.0","xaver.clang-format@1.9.0"]}}}] annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 7f075ec7c05a7f3026383b3f16666ea6f6adc8ea Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 15:08:11 +0000 Subject: [PATCH 15/23] chore: single quote content of label to prevent shell interpolation --- .github/workflows/build-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 73a43c41..6c9d1a5c 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -96,7 +96,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=[{"remoteEnv":{"LOCAL_WORKSPACE_FOLDER":"${localWorkspaceFolder}"},"customizations":{"vscode":{"extensions":["llvm-vs-code-extensions.vscode-clangd@0.1.25","marus25.cortex-debug@1.12.1","matepek.vscode-catch2-test-adapter@4.7.0","mhutchie.git-graph@1.30.0","ms-vscode.cmake-tools@1.16.32","ms-vscode.cpptools@1.18.5","ms-vsliveshare.vsliveshare@1.0.5900","SonarSource.sonarlint-vscode@4.1.0","xaver.clang-format@1.9.0"]}}}] + devcontainer.metadata='[{"remoteEnv":{"LOCAL_WORKSPACE_FOLDER":"${localWorkspaceFolder}"},"customizations":{"vscode":{"extensions":["llvm-vs-code-extensions.vscode-clangd@0.1.25","marus25.cortex-debug@1.12.1","matepek.vscode-catch2-test-adapter@4.7.0","mhutchie.git-graph@1.30.0","ms-vscode.cmake-tools@1.16.32","ms-vscode.cpptools@1.18.5","ms-vsliveshare.vsliveshare@1.0.5900","SonarSource.sonarlint-vscode@4.1.0","xaver.clang-format@1.9.0"]}}}]' annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 70ed21785a448ec08ebcf8241306f07bb2a4dc96 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 15:15:43 +0000 Subject: [PATCH 16/23] chore: running out of ideas --- .github/workflows/build-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 6c9d1a5c..905f0a45 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -96,7 +96,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata='[{"remoteEnv":{"LOCAL_WORKSPACE_FOLDER":"${localWorkspaceFolder}"},"customizations":{"vscode":{"extensions":["llvm-vs-code-extensions.vscode-clangd@0.1.25","marus25.cortex-debug@1.12.1","matepek.vscode-catch2-test-adapter@4.7.0","mhutchie.git-graph@1.30.0","ms-vscode.cmake-tools@1.16.32","ms-vscode.cpptools@1.18.5","ms-vsliveshare.vsliveshare@1.0.5900","SonarSource.sonarlint-vscode@4.1.0","xaver.clang-format@1.9.0"]}}}]' + devcontainer.metadata=[{"remoteEnv":{"LOCAL_WORKSPACE_FOLDER":"${localWorkspaceFolder}"},"customizations":{"vscode":{"extensions":[\"llvm-vs-code-extensions.vscode-clangd@0.1.25\",\"marus25.cortex-debug@1.12.1\",\"matepek.vscode-catch2-test-adapter@4.7.0\",\"mhutchie.git-graph@1.30.0\",\"ms-vscode.cmake-tools@1.16.32\",\"ms-vscode.cpptools@1.18.5\",\"ms-vsliveshare.vsliveshare@1.0.5900\",\"SonarSource.sonarlint-vscode@4.1.0\",\"xaver.clang-format@1.9.0\"]}}}] annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 74564e77e2506bbbf3d84c93c4c6f774d0dca1a8 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 15:26:36 +0000 Subject: [PATCH 17/23] chore: why can't you leave my quotes alone --- .github/workflows/build-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 905f0a45..d47d990f 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -96,7 +96,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=[{"remoteEnv":{"LOCAL_WORKSPACE_FOLDER":"${localWorkspaceFolder}"},"customizations":{"vscode":{"extensions":[\"llvm-vs-code-extensions.vscode-clangd@0.1.25\",\"marus25.cortex-debug@1.12.1\",\"matepek.vscode-catch2-test-adapter@4.7.0\",\"mhutchie.git-graph@1.30.0\",\"ms-vscode.cmake-tools@1.16.32\",\"ms-vscode.cpptools@1.18.5\",\"ms-vsliveshare.vsliveshare@1.0.5900\",\"SonarSource.sonarlint-vscode@4.1.0\",\"xaver.clang-format@1.9.0\"]}}}] + devcontainer.metadata=[{"remoteEnv":{"LOCAL_WORKSPACE_FOLDER":"${localWorkspaceFolder}"},"customizations":{"vscode":{"extensions":["llvm-vs-code-extensions.vscode-clangd@0.1.25", "marus25.cortex-debug@1.12.1", "matepek.vscode-catch2-test-adapter@4.7.0", "mhutchie.git-graph@1.30.0", "ms-vscode.cmake-tools@1.16.32", "ms-vscode.cpptools@1.18.5", "ms-vsliveshare.vsliveshare@1.0.5900", "SonarSource.sonarlint-vscode@4.1.0", "xaver.clang-format@1.9.0"]}}}] annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 8e18d40e3b5ce63d6ff50ec4e641b84c2829cf5b Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 15:40:01 +0000 Subject: [PATCH 18/23] ci: final victory --- .github/workflows/build-push.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index d47d990f..d19b583f 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -85,7 +85,9 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - - run: echo "metadata=$(jq -cj '.' .devcontainer/devcontainer-metadata-vscode.json)" >> "$GITHUB_OUTPUT" + # Generate image LABEL for devcontainer.metadata + # the sed expression is a workaround for quotes being eaten in arrays (e.g. ["x", "y", "z"] -> ["x",y,"z"]) + - run: echo "metadata=$(jq -cj '.' .devcontainer/devcontainer-metadata-vscode.json | sed 's/,"/, "/g')" >> "$GITHUB_OUTPUT" id: devcontainer-metadata - uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 id: build-and-push-vscode @@ -96,7 +98,7 @@ jobs: tags: ${{ steps.metadata-vscode.outputs.tags }} labels: | ${{ steps.metadata-vscode.outputs.labels }} - devcontainer.metadata=[{"remoteEnv":{"LOCAL_WORKSPACE_FOLDER":"${localWorkspaceFolder}"},"customizations":{"vscode":{"extensions":["llvm-vs-code-extensions.vscode-clangd@0.1.25", "marus25.cortex-debug@1.12.1", "matepek.vscode-catch2-test-adapter@4.7.0", "mhutchie.git-graph@1.30.0", "ms-vscode.cmake-tools@1.16.32", "ms-vscode.cpptools@1.18.5", "ms-vsliveshare.vsliveshare@1.0.5900", "SonarSource.sonarlint-vscode@4.1.0", "xaver.clang-format@1.9.0"]}}}] + devcontainer.metadata=${{ steps.devcontainer-metadata.outputs.metadata }} annotations: ${{ steps.metadata-vscode.outputs.annotations }} sbom: true provenance: true From 13c26ea22536e1d638fd50ae152f0238f27dea54 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Sun, 18 Feb 2024 16:10:40 +0000 Subject: [PATCH 19/23] chore: add vscode settings --- .devcontainer/devcontainer-metadata-vscode.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.devcontainer/devcontainer-metadata-vscode.json b/.devcontainer/devcontainer-metadata-vscode.json index 14e9c8d2..77a5dae8 100644 --- a/.devcontainer/devcontainer-metadata-vscode.json +++ b/.devcontainer/devcontainer-metadata-vscode.json @@ -14,6 +14,19 @@ "SonarSource.sonarlint-vscode@4.1.0", "xaver.clang-format@1.9.0" ] + }, + "settings": { + "C_Cpp.intelliSenseEngine": "disabled", + "C_Cpp.formatting": "clangFormat", + "clangd.arguments": [ + "--query-driver=/opt/**/arm-none-eabi-*", + "--compile-commands-dir=${workspaceFolder}/.amp" + ], + "cmake.copyCompileCommands": "${workspaceFolder}/.amp/compile_commands.json", + "cmake.options.statusBarVisibility": "compact", + "cortex-debug.gdbPath": "gdb-multiarch", + "cortex-debug.objdumpPath": "arm-none-eabi-objdump", + "sonarlint.pathToCompileCommands": "${workspaceFolder}/.amp/compile_commands.json" } } } From 4c5e4a8568db7e5426fbab7f04f600266d623ea8 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:06:31 +0000 Subject: [PATCH 20/23] chore: change path to compile_commands --- .devcontainer/devcontainer-metadata-vscode.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.devcontainer/devcontainer-metadata-vscode.json b/.devcontainer/devcontainer-metadata-vscode.json index 77a5dae8..2d8e5a92 100644 --- a/.devcontainer/devcontainer-metadata-vscode.json +++ b/.devcontainer/devcontainer-metadata-vscode.json @@ -20,13 +20,13 @@ "C_Cpp.formatting": "clangFormat", "clangd.arguments": [ "--query-driver=/opt/**/arm-none-eabi-*", - "--compile-commands-dir=${workspaceFolder}/.amp" + "--compile-commands-dir=${userHome}/.amp" ], - "cmake.copyCompileCommands": "${workspaceFolder}/.amp/compile_commands.json", + "cmake.copyCompileCommands": "${userHome}/.amp/compile_commands.json", "cmake.options.statusBarVisibility": "compact", "cortex-debug.gdbPath": "gdb-multiarch", "cortex-debug.objdumpPath": "arm-none-eabi-objdump", - "sonarlint.pathToCompileCommands": "${workspaceFolder}/.amp/compile_commands.json" + "sonarlint.pathToCompileCommands": "${userHome}/.amp/compile_commands.json" } } } From cf3f1048bb6867b98b40345c4cd46bbc688be7ca Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Tue, 20 Feb 2024 08:21:40 +0000 Subject: [PATCH 21/23] chore: update vscode plugin versions --- .devcontainer/devcontainer-metadata-vscode.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.devcontainer/devcontainer-metadata-vscode.json b/.devcontainer/devcontainer-metadata-vscode.json index 2d8e5a92..2c868881 100644 --- a/.devcontainer/devcontainer-metadata-vscode.json +++ b/.devcontainer/devcontainer-metadata-vscode.json @@ -4,14 +4,14 @@ "customizations": { "vscode": { "extensions": [ - "llvm-vs-code-extensions.vscode-clangd@0.1.25", + "llvm-vs-code-extensions.vscode-clangd@0.1.26", "marus25.cortex-debug@1.12.1", - "matepek.vscode-catch2-test-adapter@4.7.0", + "matepek.vscode-catch2-test-adapter@4.8.3", "mhutchie.git-graph@1.30.0", - "ms-vscode.cmake-tools@1.16.32", + "ms-vscode.cmake-tools@1.17.15", "ms-vscode.cpptools@1.18.5", - "ms-vsliveshare.vsliveshare@1.0.5900", - "SonarSource.sonarlint-vscode@4.1.0", + "ms-vsliveshare.vsliveshare@1.0.5905", + "SonarSource.sonarlint-vscode@4.3.0", "xaver.clang-format@1.9.0" ] }, From 92a64f04f180264cf26bc2e3633c0c3edf6c229b Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Tue, 20 Feb 2024 11:04:28 +0000 Subject: [PATCH 22/23] chore: update documentation --- README.md | 62 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index a7969f2f..b39152ce 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,15 @@ This repository is under active development; see [pulse](https://github.com/phil ## Description +### Image variants + +Two devcontainers are published towards the [GitHub Container Registry](https://ghcr.io/): + +- [amp-devcontainer](https://github.com/orgs/philips-software/packages/container/package/amp-devcontainer); the base container including all tools mentioned below +- [amp-devcontainer-vscode](https://github.com/orgs/philips-software/packages/container/package/amp-devcontainer-vscode); as above, but including a full [Visual Studio Code](https://code.visualstudio.com/) configuration that is compatible with [GitHub Codespaces](https://github.com/features/codespaces) + +### amp-devcontainer + The amp-devcontainer built from this repository contains compilers and tools to facilitate modern (embedded) C++ development. The amp-devcontainer includes support for host- and cross-compilation using gcc, arm-gcc and clang compilers. Next to the compilers there is support for code-coverage measurement, mutation testing (using [mull](https://github.com/mull-project/mull)), fuzzing (using [libfuzzer](https://www.llvm.org/docs/LibFuzzer.html)) and static analysis (clang-format, clang-tidy, clangd, include-what-you-use). @@ -21,27 +30,38 @@ The default build system is set up to use CMake, Ninja and CCache. For the full list of all included tools and tool versions see the [Dependency Graph](https://github.com/philips-software/amp-devcontainer/network/dependencies), the SBOM published with a [release](https://github.com/philips-software/amp-devcontainer/releases), or the SBOM attached to the image. -## Build & Test +### amp-devcontainer-vscode -The container can be built and tested locally by importing this repository in VS Code with the `Dev Containers` (ms-vscode-remote.remote-containers) plug-in installed. As a prerequisite Docker needs to be installed on the host system. As an alternative a GitHub Codespace can be started. +The amp-devcontainer-vscode is a, slightly more, opinionated variant that can be used in Visual Studio Code or GitHub Codespaces without any additional configuration. All included tools are set-up and necessary plug-ins will be installed at container start. This behavior is implemented by appending devcontainer metadata to an image label according to the [specifications](https://containers.dev/implementors/reference/#labels). -A test task is available to run the included `bats` tests. Choose `Tasks: Run Test Task` from the command pallette. +## Usage -## Verify image signature +### Verify image signature -The container image is signed with [SigStore](https://www.sigstore.dev/) [Cosign](https://docs.sigstore.dev/signing/quickstart/) using a keyless signing method. +The container images are signed with [SigStore](https://www.sigstore.dev/) [Cosign](https://docs.sigstore.dev/signing/quickstart/) using a keyless signing method. The signature can be verified with the following command (using Docker), verifying that the image is actually signed by the GitHub CI system: +> amp-devcontainer + ```sh docker run --rm gcr.io/projectsigstore/cosign verify ghcr.io/philips-software/amp-devcontainer --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity-regexp https://github.com/philips-software/amp-devcontainer ``` -## Usage +> amp-devcontainer-vscode + +```sh +docker run --rm gcr.io/projectsigstore/cosign verify ghcr.io/philips-software/amp-devcontainer-vscode --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity-regexp https://github.com/philips-software/amp-devcontainer +``` + +The resulting containers can be used in a `.devcontainer.json` file or in a `.devcontainer` folder. -The resulting container can be used in a `.devcontainer` folder. While the example uses the `latest` tag, it is recommended to pin to a specific version. Or better yet, a specific SHA. +> [!NOTE] +> While the following examples use the `latest` tag, it is recommended to pin to a specific version. Or better yet, a specific SHA. -> .devcontainer/devcontainer.json +### amp-devcontainer + +> .devcontainer/devcontainer.json or .devcontainer.json ```json { @@ -49,24 +69,40 @@ The resulting container can be used in a `.devcontainer` folder. While the examp } ``` +### amp-devcontainer-vscode + +> .devcontainer/devcontainer.json or .devcontainer.json + +```json +{ + "image": "ghcr.io/philips-software/amp-devcontainer-vscode:latest" +} +``` + ## Community -This project uses the [CODE_OF_CONDUCT](./CODE_OF_CONDUCT.md) to define expected conduct in our community. Instances of +This project uses a [code of conduct](./CODE_OF_CONDUCT.md) to define expected conduct in our community. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a project [CODEOWNER](./.github/CODEOWNERS) ## Changelog -See [CHANGELOG](./CHANGELOG.md) for more info on what's been changed. +See the [changelog](./CHANGELOG.md) for more info on what's been changed. ## Contributing -See [CONTRIBUTING](./CONTRIBUTING.md) +This project uses [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) and [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/) please see the [contributing](./CONTRIBUTING.md) guideline for more information. + +### Build & Test + +The container can be built and tested locally by importing this repository in VS Code with the [`Remote Containers`](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) plug-in installed. As a prerequisite Docker needs to be installed on the host system. Alternatively a GitHub Codespace can be started. + +A test task is available to run the included `bats` tests. Choose `Tasks: Run Test Task` from the command pallette. ## Reporting vulnerabilities If you find a vulnerability, please report it to us! -See [SECURITY.md](./SECURITY.md) for more information. +See [security](./SECURITY.md) for more information. ## Licenses -See [LICENSE](./LICENSE) +See [license](./LICENSE) From 562ce60bc44a84ac7c0bc9fb0b3572abe80ff550 Mon Sep 17 00:00:00 2001 From: Ron <45816308+rjaegers@users.noreply.github.com> Date: Tue, 20 Feb 2024 11:34:27 +0000 Subject: [PATCH 23/23] docs: minor update on merge logic for devcontainer.metadata --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b39152ce..b7cf2cc1 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ For the full list of all included tools and tool versions see the [Dependency Gr ### amp-devcontainer-vscode -The amp-devcontainer-vscode is a, slightly more, opinionated variant that can be used in Visual Studio Code or GitHub Codespaces without any additional configuration. All included tools are set-up and necessary plug-ins will be installed at container start. This behavior is implemented by appending devcontainer metadata to an image label according to the [specifications](https://containers.dev/implementors/reference/#labels). +The amp-devcontainer-vscode is a, slightly more, opinionated variant that can be used in Visual Studio Code or GitHub Codespaces without any additional configuration. All included tools are set-up and necessary plug-ins will be installed at container start. This behavior is implemented by appending devcontainer metadata to an image label according to the [specifications](https://containers.dev/implementors/reference/#labels). It is possible to override, amend or change the options following this [merge logic](https://containers.dev/implementors/spec/#merge-logic). ## Usage