💻 Publish a single Dev Container Feature
1️⃣ Publishes a single feature instead of a whole monorepo
🤝 Works well with Dev Container Feature polyrepos
0️⃣ Zero-config; sensible defaults
👀 Check out devcontainers-community/feature-starter for a template feature repo that uses this action.
To get started, just create a new GitHub Repository that has a valid devcontainer-feature.json
manifest file and a working install.sh
script. Then add this to a GitHub Workflow like .github/workflows/publish-feature.yml
:
# publish-feature.yml name: Publish feature on: release: types: published workflow_dispatch: concurrency: group: ${{ github.workflow }} cancel-in-progress: true jobs: permissions: contents: read packages: write publish-feature: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: devcontainers-community/publish-feature@v1
This will publish the Dev Container Feature to your-username/features/id-of-your-feature and can be used like this:
-
path
: Where thedevcontainer-feature.json
manifest is located. The default is.
. -
files
: Which files to include in the OCI published image. You can specify a multiline list of glob patterns to include in the package. By default this includes everything. TheREADME.md
,LICENSE
, anddevcontainer-feature.json
files will always be included in the generated image. -
source
: What to put for theorg.opencontainers.source
annotation on the image. This defaults to the current GitHub repository using${{ github.server_url }}
and${{ github.repository }}
. -
image
: The destination image to push to. You can use a*
which will be replaced by theid
field from thedevcontainer-feature.json
that was used. By default this isghcr.io/${{ github.repository_owner }}/features/*
-
latest
: A boolean flag to indicate whether or not to push to the:latest
tag of the image. By default this istrue
. Set this tofalse
if you're publishing an older version.
This GitHub Action is written using Deno. At some point in the future, it may be transitioned to use plain Node.js. At present, though, we use a wrapper script to download the self-contained deno
binary locally and then run the main.ts
script.
To get started editing, fork this repo and make your changes. To test those changes, push them to your own main
branch or open a PR! We use GitHub Actions-ception to test this Action using GitHub Actions.