Merge branch 'merge-master-staging-ln' into staging-ln #8029
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
# See reference docs at | |
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions | |
name: ci | |
on: [push, pull_request] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
# Use alternative image when running on GitHub workflows CI to avoid potential | |
# rate limiting when executing jobs in parallel: they can't cache docker images | |
# and always pull. | |
# | |
# To update this image, generate a personal token with write:packages scope | |
# on https://github.com/settings/tokens and authenticate yourself locally with | |
# "docker login ghcr.io -u <github-username>" using the | |
# newly generated token as password. | |
# Once logged in, tag an new image: | |
# docker tag shiftcrypto/bitbox-wallet-app:VERSION \ | |
# ghcr.io/bitboxswiss/bitbox-wallet-app-ci:VERSION | |
# and push as usual: | |
# docker push ghcr.io/bitboxswiss/bitbox-wallet-app-ci:VERSION | |
# Lastly, update the next line to use the newly pushed image version. | |
# See docs for more details: | |
# https://docs.github.com/en/packages/guides/pushing-and-pulling-docker-images | |
# | |
# Keep this in sync with default in scripts/github-ci.sh. | |
CI_IMAGE: ghcr.io/bitboxswiss/bitbox-wallet-app-ci:25 | |
GITHUB_BUILD_DIR: ${{github.workspace}} | |
jobs: | |
test-lint: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone the repo | |
with: | |
submodules: recursive | |
uses: actions/checkout@v4 | |
- name: Run CI script | |
# The script also runs golang-ci but it's ok: doesn't take too long and may be useful | |
# to keep its linter errors in this log, too. | |
run: ./scripts/github-ci.sh ci | |
env: | |
OS_NAME: linux | |
android: | |
runs-on: ubuntu-22.04 | |
outputs: | |
artifact-url: ${{ steps.upload.outputs.artifact-url }} | |
steps: | |
- name: Clone the repo | |
uses: actions/checkout@v4 | |
- name: Enable caching | |
uses: actions/cache@v4 | |
with: | |
key: ${{runner.os}}-android | |
path: | | |
~/.gradle/caches | |
~/.gradle/wrapper | |
- name: Build Android | |
run: ./scripts/github-ci.sh android | |
env: | |
OS_NAME: linux | |
- name: Upload APK | |
id: upload | |
uses: actions/upload-artifact@v4 | |
with: | |
path: frontends/android/BitBoxApp/app/build/outputs/apk/debug/app-debug.apk | |
name: BitBoxApp-android-${{github.sha}}.apk | |
if-no-files-found: error | |
qt-linux: | |
runs-on: ubuntu-22.04 | |
outputs: | |
artifact-url-ai: ${{ steps.upload-ai.outputs.artifact-url }} | |
artifact-url-deb: ${{ steps.upload-deb.outputs.artifact-url }} | |
artifact-url-rpm: ${{ steps.upload-rpm.outputs.artifact-url }} | |
steps: | |
- name: Clone the repo | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Build Qt-Linux | |
run: ./scripts/github-ci.sh qt-linux | |
env: | |
OS_NAME: linux | |
- name: Upload AppImage | |
id: upload-ai | |
uses: actions/upload-artifact@v4 | |
with: | |
path: frontends/qt/build/linux/BitBoxApp-*.AppImage | |
name: BitBoxApp-linux-${{github.sha}}.AppImage | |
if-no-files-found: error | |
- name: Upload deb | |
id: upload-deb | |
uses: actions/upload-artifact@v4 | |
with: | |
path: frontends/qt/build/linux/bitbox_*.deb | |
name: BitBoxApp-linux-${{github.sha}}.deb | |
if-no-files-found: error | |
- name: Upload rpm | |
id: upload-rpm | |
uses: actions/upload-artifact@v4 | |
with: | |
path: frontends/qt/build/linux/bitbox-*.rpm | |
name: BitBoxApp-linux-${{github.sha}}.rpm | |
if-no-files-found: error | |
macos: | |
runs-on: macos-13 | |
outputs: | |
artifact-url: ${{ steps.upload.outputs.artifact-url }} | |
steps: | |
- name: Clone the repo | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20.x' | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- name: Install Qt | |
# Qt modules: Not sure why we need qtpositioning - app compilation fails without. Maybe the webengine depends on it. | |
# qtpositioning depends on qtserialport. | |
# qtwebchannel is for the JS/backend bridge. | |
# qtwebengine is for rendering the frontend. | |
run: | | |
pip install aqtinstall | |
aqt install-qt mac desktop 6.2.4 --modules qtpositioning qtserialport qtwebchannel qtwebengine --outputdir ~/Qt | |
echo "$HOME/Qt/6.2.4/macos/bin" >> $GITHUB_PATH | |
echo "$HOME/Qt/6.2.4/macos/libexec" >> $GITHUB_PATH | |
- name: Build macOS app | |
run: > | |
./scripts/github-ci.sh qt-osx; | |
env: | |
OS_NAME: osx | |
- name: Archive app | |
run: > | |
pushd ~/go/src/github.com/BitBoxSwiss/bitbox-wallet-app/frontends/qt/build/osx; | |
ditto -c -k --keepParent BitBox.app ${{github.workspace}}/BitBoxApp-macos.zip; | |
popd; | |
- name: Upload app | |
id: upload | |
uses: actions/upload-artifact@v4 | |
with: | |
path: BitBoxApp-macos.zip | |
name: BitBoxApp-macos-${{github.sha}}.zip | |
if-no-files-found: error | |
ios: | |
runs-on: macos-14 | |
env: | |
GO_SRC_DIR: src/github.com/BitBoxSwiss/bitbox-wallet-app | |
steps: | |
- name: Clone the repo | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install Go | |
uses: actions/setup-go@v5 | |
with: | |
# Take Go version to install from go.mod. | |
go-version-file: 'go.mod' | |
- name: Set GOPATH | |
run: | | |
echo "GOPATH=$(go env GOPATH)" >> $GITHUB_ENV | |
- name: Copy repo to GOPATH | |
# This is needed as gomobile is still unaware of go modules, so the repo must be in GOPATH | |
run: | | |
mkdir -p $GOPATH/$(dirname $GO_SRC_DIR) | |
cp -a ${{github.workspace}} $GOPATH/$(dirname $GO_SRC_DIR) | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20.x' | |
- name: Build iOS app | |
run: | | |
make gomobileinit | |
(cd $GOPATH/$GO_SRC_DIR; make ios) | |
report-artifacts: | |
needs: [android, qt-linux, macos] | |
runs-on: ubuntu-22.04 | |
if: ${{ !cancelled() && github.event_name == 'push' }} | |
steps: | |
- name: Clone the repo | |
uses: actions/checkout@v4 | |
- name: Create vars | |
id: vars | |
run: | | |
echo "git_sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: Message for success | |
uses: mattermost/action-mattermost-notify@master | |
continue-on-error: true | |
if: job.status == 'success' | |
with: | |
MATTERMOST_WEBHOOK_URL: ${{ secrets.MM_WEBHOOK_URL }} | |
PAYLOAD: |- | |
{ | |
"channel": "eng-artifacts", | |
"text": "**New artifacts built**\n([${{ github.ref_name }}](https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}), [${{ steps.vars.outputs.git_sha_short }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}), [artifacts](https://github.com/${{ github.repository }}/actions/runs/${{github.run_id}}#artifacts))\n* Android - [APK](${{needs.android.outputs.artifact-url}})\n* Linux - [AppImage](${{needs.qt-linux.outputs.artifact-url-ai}}), [DEB](${{needs.qt-linux.outputs.artifact-url-deb}}), [RPM](${{needs.qt-linux.outputs.artifact-url-rpm}})\n* MacOS - [Zip](${{needs.macos.outputs.artifact-url}})", | |
"icon_emoji": "white_check_mark", | |
"props": {"card": "Repository: [${{ github.repository }}](https://github.com/${{ github.repository }})"} | |
} | |
- name: Message for failure | |
uses: mattermost/action-mattermost-notify@master | |
continue-on-error: true | |
if: job.status == 'failure' | |
with: | |
MATTERMOST_WEBHOOK_URL: ${{ secrets.MM_WEBHOOK_URL }} | |
PAYLOAD: |- | |
{ | |
"channel": "eng-build-failures", | |
"text": "**Oh no! [${{ steps.vars.outputs.git_sha_short }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) failed to build.**\nSee [run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) form more details.", | |
"icon_emoji": "warning", | |
"props": {"card": "Repository: [${{ github.repository }}](https://github.com/${{ github.repository }})\n\nbranch: [${{ github.ref_name }}](https://github.com/${{ github.repository }}/tree/${{ github.ref_name }})\n\ncommit: [${{ steps.vars.outputs.git_sha_short }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }})"} | |
} |