Skip to content

Fix build

Fix build #164

Workflow file for this run

# This is a basic workflow to help you get started with Actions
name: CI
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [develop]
tags:
- v*
- s*
paths-ignore:
- 'docs/**'
pull_request:
branches: [develop, staging, staging-new, main]
paths-ignore:
- 'docs/**'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
inputs:
run-cockroach:
description: 'Run CockroachDB tests (with profiling)'
required: false
default: 'false'
type: boolean
env:
CacheFolders: |
communication
common
desktop
desktop-package
foundations
dev
models
packages
plugins
pods
server
server-plugins
templates
services
workers
tests
rush.json
.prettierrc
tools
workers
ws-tests
PublishTempFolder: publish_artifacts
INIT_SCRIPTS_BRANCH: 'main'
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Cache node modules
uses: actions/cache@v5
env:
cache-name: cache-node-platform
with:
path: |
common/temp
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
# - name: Cheking model is updated...
# run: node common/scripts/check_model_version.js
- name: Checking for mis-matching dependencies...
run: node common/scripts/install-run-rush.js check
- name: Checking for mis-matching transitive dependencies...
run: node common/scripts/check-versions.js
- name: Installing...
run: node common/scripts/install-run-rush.js install
- name: Model version from git tags
run: node common/scripts/install-run-rush.js model-version
- name: Bundle...
run: node common/scripts/install-run-rush.js fast-build:bundle
- name: Validate...
run: node common/scripts/install-run-rush.js fast-build:validate
- name: Build @intabia-fusion/api bundle
run: |
cd dev/api
node scripts/build-bundle.js
cd bundle
npm install
npx tsc
npm pack
- name: Upload @intabia-fusion/api bundle artifact
uses: actions/upload-artifact@v5
with:
name: intabia-fusion-api-bundle
path: dev/api/bundle/intabia-fusion-api-*.tgz
if-no-files-found: error
- name: Cache build results
uses: actions/cache@v5
env:
cache-name: cache-build-results
with:
path: ${{ env.CacheFolders}}
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
svelte-check:
needs: build
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Cache build results
uses: actions/cache@v5
env:
cache-name: cache-build-results
with:
path: ${{ env.CacheFolders}}
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
- name: Checking svelte sources...
run: node common/scripts/install-run-rush.js fast-build:svelte-check
formatting:
needs: build
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Cache build results
uses: actions/cache@v5
env:
cache-name: cache-build-results
with:
path: ${{ env.CacheFolders}}
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
- name: Formatting...
run: node common/scripts/install-run-rush.js fast-format --branch ${{ github.base_ref || 'develop' }}
- name: Check files formatting
run: |
echo '================================================================'
echo 'Checking for diff files'
echo '================================================================'
git diff '*.js' '*.ts' '*.svelte' '*.json' '*.yaml' | cat
[ -z "$(git diff --name-only '*.js' '*.ts' '*.svelte' '*.json' '*.yaml' | cat)" ]
echo '================================================================'
test:
needs: build
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Cache build results
uses: actions/cache@v5
env:
cache-name: cache-build-results
with:
path: ${{ env.CacheFolders}}
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
- name: Prepare server (with rate limit retry)
run: |
set -o pipefail
cd ./tests
if ./prepare-tests.sh 2>&1 | tee /tmp/prepare-tests.log; then
echo "Prepare succeeded"
else
if grep -qi "rate limit\|too many requests\|toomanyrequests\|429" /tmp/prepare-tests.log; then
echo "Rate limit hit, logging in to Docker Hub and retrying..."
echo "${{ secrets.DOCKER_ACCESS_TOKEN }}" | docker login -u haiodo --password-stdin
./prepare-tests.sh
else
echo "Prepare failed (not a rate limit issue)"
cat /tmp/prepare-tests.log
exit 1
fi
fi
- name: Testing...
run: node common/scripts/install-run-rush.js fast-build:test --verbose
env:
DB_URL: 'postgresql://root@localhost:26258/defaultdb?sslmode=disable'
ELASTIC_URL: 'http://localhost:9201'
MONGO_URL: 'mongodb://localhost:27018'
POSTGRES_URL: 'postgresql://postgres:postgres@localhost:5433/postgres'
uitest-cockroach:
if: inputs.run-cockroach == true
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- name: Free space
uses: ./.github/actions/free-disk-space
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Cache node modules
uses: actions/cache@v5
env:
cache-name: cache-node-platform
with:
path: |
common/temp
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
- name: Checking for mis-matching dependencies...
run: node common/scripts/install-run-rush.js check
- name: Checking for mis-matching transitive dependencies...
run: node common/scripts/check-versions.js
- name: Installing...
run: node common/scripts/install-run-rush.js install
- name: Free space
uses: ./.github/actions/free-disk-space
- name: Docker Build (with rate limit retry)
run: |
set -o pipefail
if node common/scripts/install-run-rush.js fast-build:docker 2>&1 | tee /tmp/docker-build.log; then
echo "Docker build succeeded"
else
if grep -qi "rate limit\|too many requests\|toomanyrequests\|429" /tmp/docker-build.log; then
echo "Rate limit hit, logging in to Docker Hub and retrying..."
echo "${{ secrets.DOCKER_ACCESS_TOKEN }}" | docker login -u haiodo --password-stdin
node common/scripts/install-run-rush.js fast-build:docker
else
echo "Docker build failed (not a rate limit issue)"
cat /tmp/docker-build.log
exit 1
fi
fi
env:
DOCKER_CLI_HINTS: false
DOCKER_BUILDKIT: 1
- name: Configure /etc/hosts
run: |
sudo echo "127.0.0.1 huly.local" | sudo tee -a /etc/hosts
# CockroachDB tests with profiling
- name: Run UI tests (CockroachDB)
uses: ./.github/actions/ui-test
with:
test-folder: tests
prepare-script: ./prepare-cockroach.sh
build-package: '@hcengineering/tests-sanity'
artifact-name-suffix: cockroach
enable-profiling: 'true'
docker-access-token: ${{ secrets.DOCKER_ACCESS_TOKEN }}
uitest-pg:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- name: Free space
uses: ./.github/actions/free-disk-space
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Cache node modules
uses: actions/cache@v5
env:
cache-name: cache-node-platform
with:
path: |
common/temp
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
- name: Checking for mis-matching dependencies...
run: node common/scripts/install-run-rush.js check
- name: Checking for mis-matching transitive dependencies...
run: node common/scripts/check-versions.js
- name: Installing...
run: node common/scripts/install-run-rush.js install
- name: Free space
uses: ./.github/actions/free-disk-space
- name: Docker Build (with rate limit retry)
run: |
set -o pipefail
if node common/scripts/install-run-rush.js fast-build:docker 2>&1 | tee /tmp/docker-build.log; then
echo "Docker build succeeded"
else
if grep -qi "rate limit\|too many requests\|toomanyrequests\|429" /tmp/docker-build.log; then
echo "Rate limit hit, logging in to Docker Hub and retrying..."
echo "${{ secrets.DOCKER_ACCESS_TOKEN }}" | docker login -u haiodo --password-stdin
node common/scripts/install-run-rush.js fast-build:docker
else
echo "Docker build failed (not a rate limit issue)"
cat /tmp/docker-build.log
exit 1
fi
fi
env:
DOCKER_CLI_HINTS: false
DOCKER_BUILDKIT: 1
- name: Configure /etc/hosts
run: |
sudo echo "127.0.0.1 huly.local" | sudo tee -a /etc/hosts
# PostgreSQL tests
- name: Run UI tests (PostgreSQL)
uses: ./.github/actions/ui-test
with:
test-folder: tests
prepare-script: ./prepare-pg.sh
build-package: '@hcengineering/tests-sanity'
artifact-name-suffix: pg
enable-profiling: 'true'
docker-access-token: ${{ secrets.DOCKER_ACCESS_TOKEN }}
uitest-workspaces:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- name: Free space
uses: ./.github/actions/free-disk-space
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Cache node modules
uses: actions/cache@v5
env:
cache-name: cache-node-platform
with:
path: |
common/temp
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
- name: Checking for mis-matching dependencies...
run: node common/scripts/install-run-rush.js check
- name: Checking for mis-matching transitive dependencies...
run: node common/scripts/check-versions.js
- name: Installing...
run: node common/scripts/install-run-rush.js install
- name: Free space
uses: ./.github/actions/free-disk-space
- name: Docker Build (with rate limit retry)
run: |
set -o pipefail
if node common/scripts/install-run-rush.js fast-build:docker 2>&1 | tee /tmp/docker-build.log; then
echo "Docker build succeeded"
else
if grep -qi "rate limit\|too many requests\|toomanyrequests\|429" /tmp/docker-build.log; then
echo "Rate limit hit, logging in to Docker Hub and retrying..."
echo "${{ secrets.DOCKER_ACCESS_TOKEN }}" | docker login -u haiodo --password-stdin
node common/scripts/install-run-rush.js fast-build:docker
else
echo "Docker build failed (not a rate limit issue)"
cat /tmp/docker-build.log
exit 1
fi
fi
env:
DOCKER_CLI_HINTS: false
DOCKER_BUILDKIT: 1
- name: Configure /etc/hosts
run: |
sudo echo "127.0.0.1 huly.local" | sudo tee -a /etc/hosts
# Workspace tests with API tests (first, fastest)
- name: Run UI tests (Workspaces)
uses: ./.github/actions/ui-test
with:
test-folder: ws-tests
prepare-script: ./prepare.sh
build-package: '@hcengineering/tests-ws-sanity'
artifact-name-suffix: ws
run-api-tests: 'true'
docker-access-token: ${{ secrets.DOCKER_ACCESS_TOKEN }}
docker-build:
needs: [uitest-workspaces]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
# https://github.com/actions/runner-images/issues/2840#issuecomment-790492173
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- name: Free space
uses: ./.github/actions/free-disk-space
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Configure docker
uses: docker/setup-docker-action@v4
with:
daemon-config: |
{
"features": {
"containerd-snapshotter": true
}
}
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- uses: pnpm/action-setup@v4
with:
version: latest
- name: Cache node modules
uses: actions/cache@v5
env:
cache-name: cache-node-platform
with:
path: |
common/temp
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
- name: Installing...
run: node common/scripts/install-run-rush.js install
- name: Model version from git tags
run: node common/scripts/install-run-rush.js model-version
- name: Docker build (with rate limit retry)
run: |
set -o pipefail
docker system prune -a -f
if node common/scripts/install-run-rush.js fast-build:docker-build -v 2>&1 | tee /tmp/docker-build.log; then
echo "Docker build succeeded"
else
if grep -qi "rate limit\|too many requests\|toomanyrequests\|429" /tmp/docker-build.log; then
echo "Rate limit hit, logging in to Docker Hub and retrying..."
echo "${{ secrets.DOCKER_ACCESS_TOKEN }}" | docker login -u haiodo --password-stdin
node common/scripts/install-run-rush.js fast-build:docker-build -v
else
echo "Docker build failed (not a rate limit issue)"
cat /tmp/docker-build.log
exit 1
fi
fi
docker builder prune -a -f
env:
DOCKER_CLI_HINTS: false
DOCKER_EXTRA: --platform=linux/amd64,linux/arm64
DOCKER_BUILDKIT: 1
DOCKER_BUILD_CLEANUP: true
- name: Docker push tag
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/tags/s') }}
run: |
echo Pushing release of tag ${{ github.ref }}
echo "${{ secrets.DOCKER_ACCESS_TOKEN }}" | docker login -u haiodo --password-stdin
node common/scripts/install-run-rush.js docker:push -v
dist-build:
# if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/tags/s') }}
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/tags/s') }}
needs: build
runs-on: macos-latest
timeout-minutes: 60
outputs:
release_tag: ${{ steps.release_info.outputs.release_tag }}
rev: ${{ steps.release_info.outputs.rev }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- name: Free space
uses: ./.github/actions/free-disk-space
- uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
- name: Cache node modules
uses: actions/cache@v5
env:
cache-name: node
with:
path: |
common/temp
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }}
- name: Installing...
run: node common/scripts/install-run-rush.js install --purge
- name: Model version from git tags
run: node common/scripts/install-run-rush.js model-version
- name: Package
run: node common/scripts/install-run-rush.js fast-build:package --to desktop -v
- name: Bump package JSON version
run: |
cd desktop-package
node ../common/scripts/install-run-rushx.js bump
cat ./package.json
# - name: Install the Apple certificate and provisioning profile
# env:
# DEV_ID_P12_BASE64: ${{ secrets.DEV_ID_P12_BASE64 }}
# DEV_ID_P12_PASSWORD: ${{ secrets.DEV_ID_P12_PASSWORD }}
# KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
# run: |
# # create variables
# CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
# KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# # import certificate from secret
# echo -n "$DEV_ID_P12_BASE64" | base64 --decode -o $CERTIFICATE_PATH
# # create temporary keychain
# security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
# security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# # import certificate to keychain
# security import $CERTIFICATE_PATH -P "$DEV_ID_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
# security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# security list-keychain -d user -s $KEYCHAIN_PATH
- name: Build distribution's
# env:
# APPLE_ID: ${{ secrets.APPLE_ID }}
# APPLE_ID_APP_PASS: ${{ secrets.APPLE_ID_APP_PASS }}
# TEAM_ID: ${{ secrets.TEAM_ID }}
run: |
cd desktop-package
node ../common/scripts/install-run-rushx.js dist --linux --x64
node ../common/scripts/install-run-rushx.js dist --windows --x64
node ../common/scripts/install-run-rushx.js dist --macos --x64 --arm64
# ./scripts/copy-publish-artifacts.sh ${{ env.PublishTempFolder}}
# - name: Publish distribution assets and version
# uses: ryand56/r2-upload-action@latest
# with:
# r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
# r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
# r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
# r2-bucket: desktop-distro
# source-dir: desktop-package/${{ env.PublishTempFolder}}
# destination-dir: ./
- name: Upload MacOS
uses: actions/upload-artifact@v5
with:
name: Platform-MacOS-x64
path: ./desktop-package/deploy/Platform-macos-*-x64.dmg
- name: Upload MacOS Zip
uses: actions/upload-artifact@v5
with:
name: Platform-MacOS-zip
path: ./desktop-package/deploy/Platform-macos*.zip
- name: Upload MacOS arm64
uses: actions/upload-artifact@v5
with:
name: Platform-MacOS-arm64
path: ./desktop-package/deploy/Platform-macos-*-arm64.dmg
- name: Upload Windows
uses: actions/upload-artifact@v5
with:
name: Platform-Windows
path: ./desktop-package/deploy/Platform-windows-*.exe
- name: Upload Windows zip
uses: actions/upload-artifact@v5
with:
name: Platform-Windows-zip
path: ./desktop-package/deploy/Platform-windows-*.zip
- name: Upload Linux
uses: actions/upload-artifact@v5
with:
name: Platform-Linux-arm64
path: ./desktop-package/deploy/Platform-linux-*-arm64.zip
- name: Upload Linux
uses: actions/upload-artifact@v5
with:
name: Platform-Linux-x64
path: ./desktop-package/deploy/Platform-linux-*-x64.zip
- name: Upload Linux App image
uses: actions/upload-artifact@v5
with:
name: Platform-Linux-AppImage
path: ./desktop-package/deploy/Platform-linux-*.AppImage
- name: List deploy contents
run: |
cd desktop-package
echo "Files in deploy directory:"
ls -la deploy/
- name: Build server bundle (macOS only)
run: |
cd desktop-package
node ../common/scripts/install-run-rushx.js bundle:server
- name: Upload server bundle
uses: actions/upload-artifact@v5
with:
name: server-bundle
path: ./desktop-package/bundle
- name: Upload manifests (yml + blockmap)
uses: actions/upload-artifact@v5
with:
name: desktop-manifests
path: |
./desktop-package/deploy/*.yml
./desktop-package/deploy/*.yaml
./desktop-package/deploy/*.blockmap
- name: Set release info
id: release_info
run: |
echo "release_tag=$(node common/scripts/show_tag.js)" >> $GITHUB_OUTPUT
echo "rev=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
dist-build-docker:
needs: dist-build
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
filter: tree:0
submodules: recursive
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Configure docker
uses: docker/setup-docker-action@v4
with:
daemon-config: |
{
"features": {
"containerd-snapshotter": true
}
}
- name: Download Platform-MacOS-x64
uses: actions/download-artifact@v5
with:
name: Platform-MacOS-x64
path: ./desktop-package/deploy
- name: Download Platform-MacOS-arm64
uses: actions/download-artifact@v5
with:
name: Platform-MacOS-arm64
path: ./desktop-package/deploy
- name: Download Platform-MacOS-zip
uses: actions/download-artifact@v5
with:
name: Platform-MacOS-zip
path: ./desktop-package/deploy
- name: Download Platform-Windows
uses: actions/download-artifact@v5
with:
name: Platform-Windows
path: ./desktop-package/deploy
- name: Download Platform-Windows-zip
uses: actions/download-artifact@v5
with:
name: Platform-Windows-zip
path: ./desktop-package/deploy
# - name: Download Platform-Linux-arm64
# uses: actions/download-artifact@v5
# with:
# name: Platform-Linux-arm64
# path: ./desktop-package/deploy
- name: Download Platform-Linux-x64
uses: actions/download-artifact@v5
with:
name: Platform-Linux-x64
path: ./desktop-package/deploy
- name: Download Platform-Linux-AppImage
uses: actions/download-artifact@v5
with:
name: Platform-Linux-AppImage
path: ./desktop-package/deploy
- name: Download server-bundle
uses: actions/download-artifact@v5
with:
name: server-bundle
path: ./desktop-package/bundle
- name: Download desktop-manifests
uses: actions/download-artifact@v5
with:
name: desktop-manifests
path: ./desktop-package/deploy
- name: List downloaded artifacts
run: ls -R ./desktop-package/deploy || true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: haiodo
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Build and push Docker image (via package script)
run: |
set -euo pipefail
cd desktop-package
../common/scripts/docker_build.sh haiodo/desktop-distro
../common/scripts/docker_tag.sh haiodo/desktop-distro
env:
DOCKER_CLI_HINTS: false
DOCKER_BUILDKIT: 1
BUILD_REV: ${{ needs.dist-build.outputs.rev }}
RELEASE_TAG: ${{ needs.dist-build.outputs.release_tag }}