{"id":20801919,"url":"https://github.com/philips-software/amp-devcontainer","last_synced_at":"2026-01-16T11:35:18.858Z","repository":{"id":65600304,"uuid":"593996679","full_name":"philips-software/amp-devcontainer","owner":"philips-software","description":"🔋amp-devcontainer is a batteries-included devcontainer useable for modern, embedded, software development","archived":false,"fork":false,"pushed_at":"2025-05-04T03:04:00.000Z","size":1085,"stargazers_count":118,"open_issues_count":6,"forks_count":5,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-05-04T04:18:17.000Z","etag":null,"topics":["clang-format","clang-tidy","clangd","cmake","cpp","devcontainer","embedded","fuzzing","mutation-testing","rust"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/philips-software.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-01-27T10:53:14.000Z","updated_at":"2025-04-29T13:18:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"c3a6a363-f60f-4650-9dfc-adc52692ae27","html_url":"https://github.com/philips-software/amp-devcontainer","commit_stats":null,"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Famp-devcontainer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Famp-devcontainer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Famp-devcontainer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Famp-devcontainer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/philips-software","download_url":"https://codeload.github.com/philips-software/amp-devcontainer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252793564,"owners_count":21805054,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clang-format","clang-tidy","clangd","cmake","cpp","devcontainer","embedded","fuzzing","mutation-testing","rust"],"created_at":"2024-11-17T18:26:10.182Z","updated_at":"2026-01-06T08:18:51.978Z","avatar_url":"https://github.com/philips-software.png","language":"TypeScript","readme":"# amp-devcontainer\n\n\u003c!-- markdownlint-disable --\u003e\n[![Linting \u0026 Formatting](https://github.com/philips-software/amp-devcontainer/actions/workflows/linting-formatting.yml/badge.svg)](https://github.com/philips-software/amp-devcontainer/actions/workflows/linting-formatting.yml) [![Continuous Integration](https://github.com/philips-software/amp-devcontainer/actions/workflows/continuous-integration.yml/badge.svg?branch=main)](https://github.com/philips-software/amp-devcontainer/actions/workflows/continuous-integration.yml) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9267/badge)](https://www.bestpractices.dev/projects/9267) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/philips-software/amp-devcontainer/badge)](https://securityscorecards.dev/viewer/?uri=github.com/philips-software/amp-devcontainer)\n\u003c!-- markdownlint enable --\u003e\n\n## Table of Contents\n\n- [Overview](#overview)\n- [State](#state)\n- [Description](#description)\n  - [Image flavors](#image-flavors)\n  - [Versioning](#versioning)\n  - [Visual Studio Code](#visual-studio-code)\n- [Usage](#usage)\n  - [Verify image signature](#verify-image-signature)\n  - [Local development](#local-development)\n  - [Continuous Integration](#continuous-integration)\n- [Community](#community)\n- [Changelog](#changelog)\n- [Contributing](#contributing)\n- [Reporting vulnerabilities](#reporting-vulnerabilities)\n- [Licenses](#licenses)\n\n## Overview\n\nThis repository contains [devcontainers](https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/introduction-to-dev-containers) tailored towards modern, embedded, software development.\n\n### Key Features\n\n- **Batteries Included** 🔋: Pre-configured tools for local development and continuous integration.\n- **Developer Experience** 👩‍💻: Minimal set-up time and maximal shift-left.\n- **Multi-platform Support** ⚙️: Compatible with x64 and arm64 hardware on Windows, Linux, and macOS.\n- **Image Flavors** 🍨: Dedicated containers for C++ and Rust development.\n- **IDE Integration** 💻: Fully compatible with GitHub Codespaces and VS Code.\n- **Semantic Versioning** 🔢: Clear versioning strategy for container images.\n- **Secure** 🔒: Emphasis on supply-chain security and compatible with Dependabot.\n- **Tested** ✅: Includes verification tests.\n\nThe containers try to be as \"batteries included\" as possible without being overly opinionated, and are usable for both local development and continuous integration.\n\nAll containers are multi-platform and can be used on x64 (x86-64) and arm64 hardware on an operating system that supports an [OCI](https://opencontainers.org/) compatible container engine.\nThis includes Windows, Linux, and macOS on both Intel and Apple silicon.\n\n## State\n\nThis repository is under active development; see [pulse](https://github.com/philips-software/amp-devcontainer/pulse) for more details.\n\n## Description\n\n### Image flavors\n\nThe following devcontainers are published towards the [GitHub Container Registry](https://ghcr.io/):\n\n- [amp-devcontainer-cpp](https://github.com/orgs/philips-software/packages/container/package/amp-devcontainer-cpp); the C++ container\n- [amp-devcontainer-rust](https://github.com/orgs/philips-software/packages/container/package/amp-devcontainer-rust); the Rust container\n\nAll containers include a full [Visual Studio Code](https://code.visualstudio.com/) configuration that is compatible with [GitHub Codespaces](https://github.com/features/codespaces).\n\nA summary of the included tools can be found below.\nFor 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.\n\n#### amp-devcontainer-cpp\n\nThe amp-devcontainer-cpp built from this repository contains compilers and tools to facilitate modern, embedded, C++ development.\nThe amp-devcontainer-cpp includes support for host- and cross-compilation using gcc, arm-gcc and clang compilers.\nNext to the compilers there is support for package management (using [CPM.cmake](https://github.com/cpm-cmake/CPM.cmake) and [Conan](https://conan.io/)) 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 and formatting (clang-format, clang-tidy, clangd, include-what-you-use).\n\nThe default build system is set up to use CMake, Ninja and CCache.\n\n#### amp-devcontainer-rust\n\nThe amp-devcontainer-rust built from this repository contains the Rust ecosystem and additional tools to facilitate, embedded, Rust development.\nThe amp-devcontainer-rust includes support for host- and cross-compilation.\nNext to the Rust ecosystem there is support for code-coverage measurement, mutation testing (using [cargo-mutants](https://mutants.rs/)), fuzzing (using [rust-fuzz](https://rust-fuzz.github.io/book/introduction.html)) and static analysis and formatting (clippy, rustfmt).\n\nFor embedded development and flashing and debugging [probe-rs](https://probe.rs/) and [flip-link](https://github.com/knurling-rs/flip-link) are included.\n\n### Versioning\n\nThe amp-devcontainer repository follows a [semantic versioning](https://semver.org/spec/v2.0.0.html) strategy for its container images.\nThis ensures clear communication of updates and compatibility.\nThe versioning format used is `\u003cmajor\u003e.\u003cminor\u003e.\u003cpatch\u003e`.\nReleased containers are tagged with `\u003cmajor\u003e`, `\u003cmajor\u003e.\u003cminor\u003e`, `\u003cmajor\u003e.\u003cminor\u003e.\u003cpatch\u003e` and `v\u003cmajor\u003e.\u003cminor\u003e.\u003cpatch\u003e`.\nThe latest build on the default branch is tagged with `edge` and pull request builds are tagged with `pr-\u003cnumber\u003e`.\n\n| Branch       | Tag                        |\n|--------------|----------------------------|\n| Default      | `edge`                     |\n| Pull Request | `pr-\u003cnumber\u003e`              |\n| Release      | `v\u003cmajor\u003e.\u003cminor\u003e.\u003cpatch\u003e` |\n|              | `\u003cmajor\u003e.\u003cminor\u003e.\u003cpatch\u003e`  |\n|              | `\u003cmajor\u003e.\u003cminor\u003e`          |\n|              | `\u003cmajor\u003e`                  |\n\nReleased containers will never be cleaned-up, pull request builds are cleaned up when the pull request is closed, and edge builds will be cleaned up shortly after a new edge version has been published.\n\nThe release notes always contain an overview of the corresponding image versions that include the full SHA next to the version number.\nThis makes it possible for humans to easily see what version is used while still pinning to an exact version.\nThis is the recommended way to refer to an image.\n\nAll container images are included in a release.\nThis might change in the future when the need arises to have separate releases per container.\n\nThis versioning strategy is implemented as GitHub Actions workflows, ensuring consistency and security across releases.\nOnly the GitHub Action workflow is allowed to create a release, and the resulting images are [signed](#verify-image-signature).\n\n### Visual Studio Code\n\nAll containers can be used in Visual Studio Code or GitHub Codespaces without any additional configuration.\nAll included tools are preconfigured and necessary plug-ins will be installed at container start.\nThis behavior is implemented by appending devcontainer metadata to an image label according to these [specifications](https://containers.dev/implementors/reference/#labels).\nIt is possible to override, amend or change the options following this [merge logic](https://containers.dev/implementors/spec/#merge-logic).\n\n## Usage\n\nThis chapter describes how to use amp-devcontainer for two common use-cases, and details how to verify the signature of the container images.\n\n\u003e [!IMPORTANT]\n\u003e While the following examples use the `latest` tag, it is recommended to pin to a specific version using vX.Y.Z. Or better yet, a specific SHA.\n\u003e See the 🔖 Packages section on the  [releases](https://github.com/philips-software/amp-devcontainer/releases) page for the unambiguous identifier corresponding to a specific release.\n\n### Verify image signature\n\n\u003cdetails\u003e\u003csummary\u003ePrior to version 5.6.0\u003c/summary\u003e\n\nThe container images are signed with [SigStore](https://www.sigstore.dev/) [Cosign](https://docs.sigstore.dev/cosign/signing/overview/) using a keyless signing method.\n\nThe signature can be [verified](https://docs.sigstore.dev/cosign/verifying/verify/) with the following command (using Docker), verifying that the image is actually signed by the GitHub CI system:\n\n\u003e amp-devcontainer-\u003c🍨 flavor\u003e\n\n```sh\ndocker run --rm gcr.io/projectsigstore/cosign verify ghcr.io/philips-software/amp-devcontainer-\u003c🍨 flavor\u003e --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity-regexp https://github.com/philips-software/amp-devcontainer\n```\n\n\u003c/details\u003e\n\nThe container images are signed using the [attest-build-provenance](https://github.com/actions/attest-build-provenance) action.\n\nThe attestations can be checked with the following command, verifying that the image is actually built by the GitHub CI system:\n\n\u003e amp-devcontainer-\u003c🍨 flavor\u003e\n\n```sh\ngh attestation verify --repo philips-software/amp-devcontainer oci://ghcr.io/philips-software/amp-devcontainer-\u003c🍨 flavor\u003e\n```\n\n### Local development\n\nThe resulting containers can be used in a `.devcontainer.json` file or in a `.devcontainer` folder.\n\n\u003e .devcontainer/devcontainer.json or .devcontainer.json\n\n```json\n{\n    \"image\": \"ghcr.io/philips-software/amp-devcontainer-\u003c🍨 flavor\u003e:latest\"\n}\n```\n\n### Continuous integration\n\nThe resulting containers can be used in a GitHub workflow by using the [`container`](https://docs.github.com/en/actions/writing-workflows/choosing-where-your-workflow-runs/running-jobs-in-a-container) property on a job.\n\n```yaml\njobs:\n  container-job:\n    runs-on: ubuntu-latest\n    container: ghcr.io/philips-software/amp-devcontainer-\u003c🍨 flavor\u003e:latest\n```\n\n## Community\n\nThis project uses a [code of conduct](.github/CODE_OF_CONDUCT.md) to define expected conduct in our community. Instances of\nabusive, harassing, or otherwise unacceptable behavior may be reported to the repository administrators by using the [report content](https://docs.github.com/en/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam) functionality of GitHub.\n\n## Changelog\n\nSee the [changelog](./CHANGELOG.md) for more info on what's been changed.\n\n## Contributing\n\nThis 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](.github/CONTRIBUTING.md) guideline for more information.\n\n### Build \u0026 Test\n\n\u003c!-- markdownlint-disable --\u003e\n[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers\u0026message=Open\u0026color=blue)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/philips-software/amp-devcontainer)\n\u003c!-- markdownlint enable --\u003e\n\nIf you already have VS Code and a OCI compatible container engine installed, you can click the badge above or\n[here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/philips-software/amp-devcontainer)\nto get started. Clicking these links will cause VS Code to automatically install the Dev Containers extension if needed,\nclone the source code into a container volume, and spin up a dev container for use. Alternatively a GitHub Codespace can be started.\n\n#### Running the Integration Tests\n\nRun the included `bats` integration tests from the test explorer. Alternatively run all tests with \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003e;\u003c/kbd\u003e \u003ckbd\u003eA\u003c/kbd\u003e.\n\n#### Running the Acceptance Tests\n\nCreate a .env file in the root of the workspace with the following contents, this assumes a GitHub account that has rights to create a Codespace on this repository and is configured for time-based one-time password (TOTP) two-factor authentication (2FA).\n\n```dotenv\nGITHUB_USER=\nGITHUB_PASSWORD=\nGITHUB_TOTP_SECRET=\n```\n\nTest can now be run using the Test Explorer. The user interface is available on port 6080 by-default. When port 6080 is already taken another port will be exposed. This can be seen with the Ports view (\u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eP\u003c/kbd\u003e, Ports: Focus on Ports View).\n\n## Reporting vulnerabilities\n\nIf you find a vulnerability, please report it to us!\nSee [security](.github/SECURITY.md) for more information.\n\n## Licenses\n\namp-devcontainer is licensed under the MIT license.\nSee [license](./LICENSE) for more information.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilips-software%2Famp-devcontainer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphilips-software%2Famp-devcontainer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilips-software%2Famp-devcontainer/lists"}