Skip to content

Release

Release #9

Workflow file for this run

name: Release
on:
workflow_dispatch:
inputs:
bump:
description: Version bump type
required: true
type: choice
options:
- patch
- minor
- major
permissions:
contents: write
concurrency:
group: release
cancel-in-progress: false
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm test
e2e:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:18
env:
POSTGRES_USER: openchess
POSTGRES_PASSWORD: openchess
POSTGRES_DB: openchess
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U openchess"
--health-interval 2s
--health-timeout 5s
--health-retries 10
redis:
image: redis:8
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 2s
--health-timeout 5s
--health-retries 10
steps:
- uses: actions/checkout@v4
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm exec playwright install chromium
- run: pnpm test:e2e
env:
CI: "true"
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: playwright-report
path: playwright-report/
retention-days: 14
release:
needs: [test, e2e]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: pnpm
- run: pnpm install --frozen-lockfile
- name: Bump version
id: version
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
pnpm version ${{ inputs.bump }} --no-git-tag-version
VERSION=$(node -p "require('./package.json').version")
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
git add package.json
git commit -m "release: v$VERSION"
git tag "v$VERSION"
echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- uses: docker/build-push-action@v6
with:
context: .
push: true
build-args: GIT_COMMIT=${{ steps.version.outputs.sha }}
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/openchess:${{ steps.version.outputs.version }}
${{ secrets.DOCKERHUB_USERNAME }}/openchess:latest
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Push release commit
run: git push origin HEAD --tags
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{ steps.version.outputs.version }}
DOCKER_USER: ${{ secrets.DOCKERHUB_USERNAME }}
run: |
GENERATED=$(gh api repos/${{ github.repository }}/releases/generate-notes \
-f tag_name="v$VERSION" --jq .body)
gh release create "v$VERSION" --notes "$(cat <<EOF
Docker image: [\`${DOCKER_USER}/openchess:${VERSION}\`](https://hub.docker.com/layers/${DOCKER_USER}/openchess/${VERSION})
---
$GENERATED
EOF
)"