Release Workflow #14
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release Workflow | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: "The version to release (e.g., 0.12.0)" | |
required: true | |
jobs: | |
# Job 1: Bump Versions and Create Tags | |
versioning: | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.set_version.outputs.version }} | |
steps: | |
# 1. Checkout the repository | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
# 2. Setup node & npm | |
- name: Setup Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '22' | |
# 3. Bump versions using npm | |
- name: Bump version in web and docs | |
id: set_version | |
run: | | |
VERSION=${{ github.event.inputs.version }} | |
cd web && npm version $VERSION --no-git-tag-version && cd .. | |
cd docs && npm version $VERSION --no-git-tag-version && cd .. | |
echo "version=v$VERSION" >> $GITHUB_OUTPUT | |
# 4. Tag and push the new versions | |
- name: Commit and Tag | |
run: | | |
git config user.name "github-actions[bot]" | |
git config user.email "github-actions[bot]@users.noreply.github.com" | |
git add web/package.json docs/package.json | |
git commit -m "Release ${{ github.event.inputs.version }}" | |
git tag "v${{ github.event.inputs.version }}" | |
git push origin main --tags | |
# Job 2: Build Docker Images | |
docker-build: | |
runs-on: ubuntu-latest | |
needs: versioning | |
steps: | |
# 1. Checkout the repository | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Setup Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '1.22' | |
# 2. Log in to Docker Hub | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
# 3. Setup docker multi platform builds | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
# 4. Build and push Docker images | |
- name: Build Docker Images | |
env: | |
VERSION: ${{ needs.versioning.outputs.version }} | |
run: | | |
# Build search image | |
docker buildx build search/ --no-cache -t flomp/wanderer-search:$VERSION -t flomp/wanderer-search:latest --platform=linux/amd64,linux/arm64 --push | |
# Build db image | |
cd db | |
env GOOS=linux GOARCH=arm64 go build -o pocketbase_arm64 | |
env GOOS=linux GOARCH=amd64 go build -o pocketbase_amd64 | |
cd .. | |
docker buildx build db/ --no-cache -t flomp/wanderer-db:$VERSION -t flomp/wanderer-db:latest --platform=linux/amd64,linux/arm64 --push | |
# Build web image | |
export PUBLIC_VALHALLA_URL=https://valhalla1.openstreetmap.de | |
cd web | |
npm ci && npm run build | |
cd .. | |
docker buildx build web/ --no-cache -t flomp/wanderer-web:$VERSION -t flomp/wanderer-web:latest --platform=linux/amd64,linux/arm64 --push | |
# Build docs image | |
cd docs | |
npm ci && npm run build | |
cd .. | |
docker buildx build docs/ --no-cache -t flomp/wanderer-docs:$VERSION -t flomp/wanderer-docs:latest --platform=linux/amd64,linux/arm64 --push | |
# Job 3: Publish the Release | |
release: | |
runs-on: ubuntu-latest | |
needs: [versioning, docker-build] | |
steps: | |
# 1. Checkout the repository | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
# 2. Extract release notes from CHANGELOG.md | |
- name: Extract release notes | |
id: changelog | |
run: | | |
VERSION="${{ needs.versioning.outputs.version }}" | |
CHANGELOG=$(awk -v ver="$VERSION" ' | |
BEGIN { in_section = 0 } | |
/^# / { | |
if (in_section) exit | |
if ($2 == ver) in_section = 1 | |
} | |
in_section { print } | |
' CHANGELOG.md) | |
echo 'changelog<<EOF' >> $GITHUB_OUTPUT | |
echo $CHANGELOG >> $GITHUB_OUTPUT | |
echo 'EOF' >> $GITHUB_OUTPUT | |
# 3. Create GitHub Release | |
- name: Create GitHub Release | |
uses: actions/create-release@v1 | |
with: | |
tag_name: ${{ needs.versioning.outputs.version }} | |
release_name: "v${{ needs.versioning.outputs.version }}" | |
body: ${{ steps.changelog.outputs.changelog }} | |
draft: false | |
prerelease: false | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |