Skip to content

Release Workflow

Release Workflow #64

Workflow file for this run

on:
push:
tags:
- "*-rc*"
permissions:
contents: write
packages: write
jobs:
build:
uses: ./.github/workflows/build_shared.yml
with:
ref: ${{ github.ref }}
tag: ${{ github.ref_name }}
strip_rc: true
test-e2e-server:
needs: [build]
runs-on: ubuntu-latest
env:
NODE_ENV: test
E2E_TEST: "true"
DATABASE_URL: postgres://root:postgres@localhost:5432/badger_test
steps:
- uses: actions/checkout@v4
- name: Use Node.js 18.x
uses: actions/setup-node@v4
with:
node-version: 18.x
cache: "yarn"
cache-dependency-path: "yarn.lock"
- name: Set ref in docker-compose
run: sed -i "s/__RC_REF__/${{ github.ref_name }}/g" docker-compose-rc-test.yml
- name: Start services
run: docker compose -f docker-compose.yml -f docker-compose-rc-test.yml up -d
- run: yarn install --immutable --inline-builds
- uses: ./.github/steps/setup-playwright
with:
working-directory: ./server
- name: Migrate database
run: |
yarn prisma:migrateProd
- name: Retart services
run: |
docker compose -f docker-compose.yml -f docker-compose-rc-test.yml restart server jobrunner
- name: Run Playwright tests
run: yarn ${{ runner.debug && 'test:e2e:debug' || 'test:e2e' }}
working-directory: ./server
env:
PLAYWRIGHT_HTML_REPORT: ${{ github.workspace }}/server/playwright-report
- uses: actions/upload-artifact@v3
if: failure()
with:
name: playwright-report-server
path: ./server/playwright-report/
retention-days: 30
test-desktop:
runs-on: windows-latest
needs: [build]
steps:
- uses: actions/checkout@v4
- name: Use Node.js 18.x
uses: actions/setup-node@v4
with:
node-version: 18.x
cache: "yarn"
cache-dependency-path: "yarn.lock"
- name: Download Desktop build
uses: actions/download-artifact@v4
with:
name: badger-desktop-windows
- name: Install Badger
run: |
$version = "${{ github.ref_name }}" -replace "^v", "" -replace "-rc.*", ""
Start-Process -FilePath "Badger Desktop-$version.exe" -ArgumentList "/S","/D=${{ runner.temp }}\badger" -Wait
shell: pwsh
- run: yarn install --immutable --inline-builds
- name: Run tests
run: yarn test:e2e --project=standalone
working-directory: ./desktop
env:
TEST_APPLICATION_PATH: ${{ runner.temp }}\badger\Badger Desktop.exe
release:
needs: [test-e2e-server, test-desktop]
environment: release
runs-on: ubuntu-latest
steps:
- name: Determine version number
run: echo "VERSION=$(echo '${{ github.ref_name }}' | sed 's/-rc.*//')" >> $GITHUB_ENV
- name: Download Desktop build
uses: actions/download-artifact@v4
with:
pattern: badger-desktop-*
path: artifacts
- name: Re-tag and push Docker images
run: |
for img in server jobrunner; do
docker pull ghcr.io/ystv/badger/$img:${{ github.ref_name }}
docker tag ghcr.io/ystv/badger/$img:${{ github.ref_name }} ghcr.io/ystv/badger/$img:$VERSION
docker push ghcr.io/ystv/badger/$img:$VERSION
docker tag ghcr.io/ystv/badger/$img:${{ github.ref_name }} ghcr.io/ystv/badger/$img:latest
docker push ghcr.io/ystv/badger/$img:latest
done
shell: bash
- name: Create GitHub release
uses: actions/github-script@v7
id: release
with:
script: |
const release = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
target_commitish: context.sha,
tag_name: process.env.VERSION,
name: process.env.VERSION,
draft: true,
generate_release_notes: true,
make_latest: true
});
core.setOutput('id', release.data.id)
core.setOutput('tag_name', release.data.tag_name)
- name: Upload artifacts
run: |
find artifacts -type f -exec gh release upload ${{ steps.release.outputs.tag_name }} {} \;
- name: Publish release
uses: actions/github-script@v7
with:
script: |
await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: ${{ steps.release.outputs.id }},
draft: false
})