Skip to content

Release version: Commit 0235501fdd755b697201e6128fbc685d5eb3206b #95

Release version: Commit 0235501fdd755b697201e6128fbc685d5eb3206b

Release version: Commit 0235501fdd755b697201e6128fbc685d5eb3206b #95

name: Build release
run-name: 'Release version: Commit ${{ github.sha }}'
permissions:
contents: write
on:
push:
branches:
- master
workflow_dispatch:
inputs:
version:
description: 'Release version'
required: false
isAutoUpdateDisabled:
description: 'Is auto-update disabled (true / 1)?'
required: false
isBfxApiStaging:
description: 'Is it necessary to use BFX API Staging? (true / 1)?'
required: false
isNotarizeDisabled:
description: 'Is notarize disabled (true / 1)?'
required: false
repoOwner:
description: 'Repository owner for auto-update'
required: false
env:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
ARCH: x64
jobs:
linux-win-docker-builder:
timeout-minutes: 90
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- if: github.event.inputs.version != ''
name: Set release version
run: |
sed -i -e \
"s/\"version\": \".*\"/\"version\": \"${{ github.event.inputs.version }}\"/g" \
"./package.json"
- if: contains(fromJson('["true", "1", true, 1]'), github.event.inputs.isAutoUpdateDisabled)
name: Turn off auto-update
run: |
echo "IS_AUTO_UPDATE_DISABLED=1" >> $GITHUB_ENV
- if: contains(fromJson('["true", "1", true, 1]'), github.event.inputs.isBfxApiStaging)
name: Use BFX API Staging for queries
run: |
echo "IS_BFX_API_STAGING=1" >> $GITHUB_ENV
- name: Set repository owner for auto-update
run: |
if [[ "${{ github.event.inputs.repoOwner }}" != "" ]]; then
echo "REPO_OWNER=${{ github.event.inputs.repoOwner }}" >> $GITHUB_ENV
else
echo "REPO_OWNER=${{ github.repository_owner }}" >> $GITHUB_ENV
fi
- name: Cache Electron binaries
id: electron-cache
uses: actions/cache@v4
env:
cache-name: electron-cache-v1
with:
path: |
~/.cache/electron
~/.cache/electron-builder
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('package.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
- name: Build release
id: release-builder
uses: nick-fields/retry@v3
continue-on-error: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
timeout_minutes: 20
retry_wait_seconds: 10
max_attempts: 3
retry_on: any
command: |
if [[ "${REPO_OWNER}" != "${{ github.repository_owner }}" ]]; then
./scripts/launch.sh -lw
else
./scripts/launch.sh -lwp
fi
- name: Zip Linux Unpacked build
run: zip -r dist/linux-unpacked.zip dist/linux-unpacked
- name: Upload Linux Unpacked build
uses: actions/upload-artifact@v4
with:
name: linux-unpacked
path: dist/linux-unpacked.zip
- name: Zip Win Unpacked build
run: zip -r dist/win-unpacked.zip dist/win-unpacked
- name: Upload Win Unpacked build
uses: actions/upload-artifact@v4
with:
name: win-unpacked
path: dist/win-unpacked.zip
- if: env.REPO_OWNER != github.repository_owner
name: Upload Linux Dist Release
uses: actions/upload-artifact@v4
with:
name: linux-dist-release
path: |
dist/*-linux.AppImage
dist/*-linux.AppImage.zip
dist/latest-linux.yml
- if: env.REPO_OWNER != github.repository_owner
name: Upload Win Dist Release
uses: actions/upload-artifact@v4
with:
name: win-dist-release
path: |
dist/*-win.exe
dist/*-win.exe.blockmap
dist/latest.yml
- name: Prepare cache folders
run: |
sudo chown -R $(id -u):$(id -g) ~/.cache/electron
sudo chown -R $(id -u):$(id -g) ~/.cache/electron-builder
mac-builder:
timeout-minutes: 150
runs-on: macos-15-intel
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- if: github.event.inputs.version != ''
name: Set release version
run: |
sed -i".bak" -E -e \
"s/\"version\": \".*\"/\"version\": \"${{ github.event.inputs.version }}\"/g" \
"./package.json"; rm -f "./package.json.bak"
- if: contains(fromJson('["true", "1", true, 1]'), github.event.inputs.isAutoUpdateDisabled)
name: Turn off auto-update
run: |
echo "IS_AUTO_UPDATE_DISABLED=1" >> $GITHUB_ENV
- if: ${{ !contains(fromJson('["true", "1", true, 1]'), github.event.inputs.isNotarizeDisabled) }}
name: Turn on notarize
run: |
echo "NOTARIZE=1" >> $GITHUB_ENV
- if: contains(fromJson('["true", "1", true, 1]'), github.event.inputs.isBfxApiStaging)
name: Use BFX API Staging for queries
run: |
echo "IS_BFX_API_STAGING=1" >> $GITHUB_ENV
- name: Set repository owner for auto-update
run: |
if [[ "${{ github.event.inputs.repoOwner }}" != "" ]]; then
echo "REPO_OWNER=${{ github.event.inputs.repoOwner }}" >> $GITHUB_ENV
else
echo "REPO_OWNER=${{ github.repository_owner }}" >> $GITHUB_ENV
fi
- uses: actions/setup-node@v4
with:
node-version: 24.14.0
- name: Cache Electron binaries
id: electron-cache
uses: actions/cache@v4
env:
cache-name: electron-cache-v1
with:
path: |
${{ runner.temp }}/.cache/electron
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('package.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
- name: Build release
id: release-builder
uses: nick-fields/retry@v3
continue-on-error: false
env:
APPLE_TEAM_ID: ${{ secrets.BFX_APPLE_TEAM_ID }}
APPLE_ID: ${{ secrets.BFX_APPLE_ID_USERNAME }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.BFX_APPLE_ID_REPORT_PASSWORD }}
CSC_LINK: ${{ secrets.BFX_APPLE_BUILD_CERTIFICATE_B64 }}
CSC_KEY_PASSWORD: ${{ secrets.BFX_APPLE_BUILD_CERTIFICATE_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ELECTRON_CACHE: ${{ runner.temp }}/.cache/electron
# https://github.com/electron-userland/electron-builder/issues/3179
USE_HARD_LINKS: false
with:
timeout_minutes: 40
retry_wait_seconds: 10
max_attempts: 3
retry_on: any
command: |
if [[ -z "${APPLE_TEAM_ID}" || "${NOTARIZE:-}" != "1" ]]; then unset NOTARIZE; fi
if [[ -z "${APPLE_TEAM_ID}" || "${NOTARIZE:-}" != "1" ]]; then unset APPLE_TEAM_ID; fi
if [[ -z "${APPLE_ID}" || "${NOTARIZE:-}" != "1" ]]; then unset APPLE_ID; fi
if [[ -z "${APPLE_APP_SPECIFIC_PASSWORD}" || "${NOTARIZE:-}" != "1" ]]; then unset APPLE_APP_SPECIFIC_PASSWORD; fi
if [[ -z "${CSC_LINK}" || "${NOTARIZE:-}" != "1" ]]; then unset CSC_LINK; fi
if [[ -z "${CSC_KEY_PASSWORD}" || "${NOTARIZE:-}" != "1" ]]; then unset CSC_KEY_PASSWORD; fi
if [[ "${REPO_OWNER}" != "${{ github.repository_owner }}" ]]; then
./scripts/build-release.sh -m
else
./scripts/build-release.sh -mp
fi
- name: Zip Mac Unpacked build
run: zip -r dist/mac.zip dist/mac
- name: Upload Mac Unpacked build
uses: actions/upload-artifact@v4
with:
name: mac-unpacked
path: dist/mac.zip
- if: env.REPO_OWNER != github.repository_owner
name: Upload Mac Dist Release
uses: actions/upload-artifact@v4
with:
name: mac-dist-release
path: |
dist/*-mac.zip
dist/*-mac.zip.blockmap
dist/*-mac.dmg
dist/*-mac.dmg.blockmap
dist/latest-mac.yml
put-changelog-to-release-page:
name: Put Changelog to Release Page
timeout-minutes: 10
runs-on: ubuntu-22.04
needs: [linux-win-docker-builder, mac-builder]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get release version
id: version
run: |
VERSION=$(jq -r .version package.json)
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Extract changelog
id: changelog
run: |
VERSION=${{ steps.version.outputs.version }}
CONTENT=$(sed -n "/## \\[$VERSION\\]/,/## \\[/p" CHANGELOG.md | sed '$d')
if [ -z "$CONTENT" ]; then
CONTENT="No changelog entry for version $VERSION"
fi
echo "content<<EOF" >> $GITHUB_OUTPUT
echo "$CONTENT" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Update matching draft release
uses: actions/github-script@v8
env:
VERSION: ${{ steps.version.outputs.version }}
CONTENT: ${{ steps.changelog.outputs.content }}
with:
script: |
const version = process.env.VERSION
const content = process.env.CONTENT
const { data: releases } = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo
})
const draft = releases.find((r) => (
r.draft &&
(
r.name === version ||
r.tag_name === `v${version}` ||
(r.name && r.name.includes(version))
)
))
if (!draft) {
core.info(`No matching draft release for version ${version}`)
return
}
core.info(`Updating draft release: ${draft.name}`)
await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: draft.id,
body: content,
})
linux-e2e-test-runner:
name: Linux E2E Test Runner
timeout-minutes: 30
runs-on: ubuntu-22.04
needs: [linux-win-docker-builder]
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24.14.0
- name: Install main dev deps
run: npm i --development --no-audit --progress=false --force
- name: Download Linux Unpacked build
uses: actions/download-artifact@v4
with:
name: linux-unpacked
path: dist
- name: Unzip Linux Unpacked build
run: unzip dist/linux-unpacked.zip
- name: Run tests
uses: coactions/setup-xvfb@6b00cf1889f4e1d5a48635647013c0508128ee1a
with:
run: npm run e2e
- name: Normalize E2E test report
run: node ./scripts/node/normalize-e2e-test-report e2e-test-report.xml
- name: Upload Linux E2E test results
uses: actions/upload-artifact@v4
with:
name: linux-e2e-test-results
path: e2e-test-report.xml
win-e2e-test-runner:
name: Win E2E Test Runner
timeout-minutes: 30
runs-on: windows-2022
needs: [linux-win-docker-builder]
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24.14.0
- name: Install main dev deps
run: npm i --development --no-audit --progress=false --force
- name: Download Linux Unpacked build
uses: actions/download-artifact@v4
with:
name: win-unpacked
path: dist
- name: Unzip Win Unpacked build
run: 7z -y x dist/win-unpacked.zip
- name: Run tests
uses: coactions/setup-xvfb@6b00cf1889f4e1d5a48635647013c0508128ee1a
with:
run: npm run e2e
- name: Normalize E2E test report
run: node ./scripts/node/normalize-e2e-test-report e2e-test-report.xml
- name: Upload Win E2E test results
uses: actions/upload-artifact@v4
with:
name: win-e2e-test-results
path: e2e-test-report.xml
mac-e2e-test-runner:
name: Mac E2E Test Runner
timeout-minutes: 30
runs-on: macos-15
needs: [mac-builder]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Prepare Mac runner
uses: ./.github/actions/prepare-mac-runner
- uses: actions/setup-node@v4
with:
node-version: 24.14.0
- name: Install main dev deps
run: npm i --development --no-audit --progress=false --force
- name: Download Mac Unpacked build
uses: actions/download-artifact@v4
with:
name: mac-unpacked
path: dist
- name: Unzip Mac Unpacked build
run: unzip dist/mac.zip
- name: Run tests
uses: coactions/setup-xvfb@6b00cf1889f4e1d5a48635647013c0508128ee1a
with:
run: npm run e2e
- name: Normalize E2E test report
run: node ./scripts/node/normalize-e2e-test-report e2e-test-report.xml
- name: Upload Mac E2E test results
uses: actions/upload-artifact@v4
with:
name: mac-e2e-test-results
path: e2e-test-report.xml