Skip to content

Commit

Permalink
Publish releases from GHA
Browse files Browse the repository at this point in the history
Automatically publish releases to NPM and Docker Hub from GHA. Only
performs a release, when:

- all tests pass on all supported platforms
- a new git tag is pushed (expected format "v1.0.0")
- git tag matches the version in package.json

The gating of releases happens in the 'check-release' job, which all
future release-* jobs depend on. This is where any final linting or
sanity checking can be done.
  • Loading branch information
jonsmock committed Nov 21, 2024
1 parent 2d4a375 commit 4addfc5
Showing 1 changed file with 76 additions and 0 deletions.
76 changes: 76 additions & 0 deletions .github/workflows/push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,79 @@ jobs:
env:
DCTEST_IMAGE: dctest
run: ./test/runexamples

# Decide if a release is necessary, do any release linting/checks
check-release:
needs: [ test-node, test-docker ]
name: Check Release
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '.')
outputs:
RELEASE_VERSION: ${{ steps.get-version.outputs.RELEASE_VERSION }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with: { submodules: 'recursive', fetch-depth: 0 }

- id: get-version
name: Get release version
run: |
echo "RELEASE_VERSION=$(jq -r .version package.json)" | tee "$GITHUB_ENV" | tee "$GITHUB_OUTPUT"
- name: Check git tag matches release version
run: |
[ "refs/tags/v${RELEASE_VERSION}" == "${{ github.ref }}" ]
release-npm:
needs: [ check-release ]
name: Release NPM
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with: { submodules: 'recursive', fetch-depth: 0 }

# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
with:
node-version: '20.x'
registry-url: 'https://registry.npmjs.org'
scope: '@lonocloud'

- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

release-docker-hub:
needs: [ check-release ]
name: Release Docker Hub
runs-on: ubuntu-latest
env:
RELEASE_VERSION: ${{ needs.check-release.outputs.RELEASE_VERSION }}
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Checkout Repository
uses: actions/checkout@v4
with: { submodules: 'recursive', fetch-depth: 0 }

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: lonocloud/dctest:${{ env.RELEASE_VERSION }}

- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: lonocloud/dctest:latest

0 comments on commit 4addfc5

Please sign in to comment.