diff --git a/.github/workflows/container-image-publish.yml b/.github/workflows/container-image-publish.yml new file mode 100644 index 0000000..633312c --- /dev/null +++ b/.github/workflows/container-image-publish.yml @@ -0,0 +1,46 @@ +name: Build and Publish Docker Image + +on: + workflow_dispatch: + release: + types: + - created + +jobs: + build-and-push: + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Get latest release version + id: get_version + run: | + LATEST_VERSION=$(gh release list --limit 1 --json tagName --jq '.[0].tagName') + echo "LATEST_VERSION=${LATEST_VERSION}" >> $GITHUB_ENV + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check if package exists + id: check_package + run: | + if docker manifest inspect ghcr.io/${{ github.repository }}:${{ env.LATEST_VERSION }} > /dev/null 2>&1; then + echo "Package already exists. Aborting." + exit 1 + fi + + - name: Log in to GitHub Container Registry + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin + + - name: Build Docker image + run: | + docker build -t ghcr.io/${{ github.repository }}:${{ env.LATEST_VERSION }} -f apps/vc-api/Dockerfile . + + - name: Push Docker image to GitHub Packages + run: | + docker push ghcr.io/${{ github.repository }}:${{ env.LATEST_VERSION }} diff --git a/README.md b/README.md index e94a1f2..5efcd54 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,13 @@ To run tests across all apps and libraries in one command, a rush script has bee $ rush test ``` +## Release Process + +Releases are done by manually creating a new release in GitHub. +Tooling like `release-please` or `release-it` could be used in the future to automate this process. + +The release will trigger [a GitHub Action](/.github/workflows/container-image-publish.yml) to publish the new version to the GitHub Container Registry. + ## Docs Editing To edit the documentation, you can run the following command to start the docs server: