fix: linux builds (#3485)

This commit is contained in:
cyan
2026-08-07 22:10:27 +02:00
committed by GitHub
parent b60b5a59f7
commit 43cd125942
15 changed files with 288 additions and 71 deletions
+30 -69
View File
@@ -2,9 +2,15 @@ name: Cake Wallet Linux
on: [pull_request]
permissions:
contents: read
packages: write
defaults:
run:
shell: bash
jobs:
PR_test_build:
runs-on: [Linux, amd64, forlinux]
@@ -26,6 +32,14 @@ jobs:
steps:
- name: Fix github actions messing up $HOME...
run: "echo HOME=/root | sudo tee -a $GITHUB_ENV"
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
@@ -35,6 +49,7 @@ jobs:
git config --global --add safe.directory '*'
git config --global user.email "ci@cakewallet.com"
git config --global user.name "CakeWallet CI"
- name: Get the full commit message
run: |
FULL_MESSAGE="$(git log -1 --pretty=%B)"
@@ -54,8 +69,8 @@ jobs:
echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
echo "const blinkApiKey = '${{ secrets.BLINK_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
echo "const blinkApiKey = '${{ secrets.BLINK_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> cw_solana/lib/.secrets.g.dart
echo "const chainStackApiKey = '${{ secrets.CHAIN_STACK_API_KEY }}';" >> cw_solana/lib/.secrets.g.dart
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_solana/lib/.secrets.g.dart
@@ -65,72 +80,19 @@ jobs:
echo "const tronGridApiKey = '${{ secrets.TRON_GRID_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
echo "const tronNowNodesApiKey = '${{ secrets.TRON_NOW_NODES_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
echo "const breezApiKey = '${{ secrets.BREEZ_API_KEY }}';" >> cw_bitcoin/lib/.secrets.g.dart
echo "${{ secrets.MAIN_SECRETS_FILE }}" | base64 --decode > lib/.secrets.g.dart
- name: Fetch prebuilt Torch
run: |
set -x -e
pushd scripts
wget https://github.com/MrCyjaneK/torch_dart/releases/download/v1.0.17/torch_dart-v1.0.17.tar.gz -O torch_dart.tar.gz
mkdir torch_dart
pushd torch_dart
tar -xzf ../torch_dart.tar.gz
popd
rm ./torch_dart.tar.gz
popd
- name: Fetch prebuilt Reown
- name: Build dependencies utilizing ghcr cache
run: |
set -x -e
pushd scripts
# cleaning
rm -rf reown_flutter
rm -f reown_flutter.tar.gz
wget https://github.com/cake-tech/reown_flutter/releases/download/v0.0.4/reown_flutter-v0.0.4.tar.gz -O reown_flutter.tar.gz
mkdir reown_flutter
pushd reown_flutter
tar -xzf ../reown_flutter.tar.gz
popd
rm ./reown_flutter.tar.gz
popd
env \
CW_DOCKER_REGISTRY=ghcr.io/cake-tech/cake_wallet \
CW_DOCKER_USE_CLOUD=true \
./scripts/linux/docker/build.sh
- name: Build Zcash Lib
run: |
set -x -e
pushd scripts/linux
./build_zcash.sh
popd
- name: Build Bitbox Flutter
run: |
set -x -e
pushd scripts
./build_bitbox_flutter.sh
popd
- name: Build monero_c
run: |
./scripts/prepare_moneroc.sh
mkdir -p scripts/monero_c/release
pushd scripts/monero_c/release
TAG=$(git describe --tags)
mkdir -p "$TAG"
pushd "$TAG"
wget https://github.com/MrCyjaneK/monero_c/releases/download/v0.18.4.6-RC2/release-bundle.zip
unzip release-bundle.zip
# RC2's bundle puts everything under an inner v0.18.4.6-*/ dir, strip it
shopt -s nullglob
for inner in v0.18.4.6-*/; do
mv "$inner"* .
rmdir "$inner"
done
shopt -u nullglob
rm release-bundle.zip
popd
popd
- name: Execute Build and Setup Commands
run: |
@@ -143,15 +105,6 @@ jobs:
run: |
flutter pub get
- name: Build mwebd
run: |
set -x -e
export MWEBD_HASH=$(cat scripts/android/build_mwebd.sh | grep 'git reset --hard' | xargs | awk '{ print $4 }')
echo MWEBD_HASH=$MWEBD_HASH >> /etc/environment
pushd scripts/android
./build_mwebd.sh
popd
- name: Build generated code
run: |
./model_generator.sh async
@@ -159,6 +112,7 @@ jobs:
- name: Generate localization
run: |
dart run tool/generate_localization.dart
- name: Build linux
run: |
flutter build linux --dart-define=hasDevOptions=true --release
@@ -198,6 +152,7 @@ jobs:
xmessage -timeout 30 "confirm_seeds_flow_test" &
rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet
exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/confirm_seeds_flow_test.dart
- name: Test [create_wallet_flow_test]
if: ${{ contains(env.message, 'run tests') }}
timeout-minutes: 20
@@ -205,6 +160,7 @@ jobs:
xmessage -timeout 30 "create_wallet_flow_test" &
rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet
exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/create_wallet_flow_test.dart
# - name: Test [exchange_flow_test]
# if: ${{ contains(env.message, 'run tests') }}
# timeout-minutes: 20
@@ -212,6 +168,7 @@ jobs:
# xmessage -timeout 30 "exchange_flow_test" &
# rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet
# exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/exchange_flow_test.dart
- name: Test [restore_wallet_through_seeds_flow_test]
if: ${{ contains(env.message, 'run tests') }}
timeout-minutes: 20
@@ -219,12 +176,15 @@ jobs:
xmessage -timeout 30 "restore_wallet_through_seeds_flow_test" &
rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet
exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart
- name: Test [cw_core]
timeout-minutes: 15
run: cd cw_core && flutter test
- name: Test [cw_monero]
timeout-minutes: 15
run: cd cw_monero && flutter test
- name: Stop screen recording, encrypt and upload
if: always()
run: |
@@ -245,6 +205,7 @@ jobs:
/opt/screen_grab.mkv
rm /opt/screen_grab.mkv
mv /opt/screen_grab.mkv.gpg ./screen_grab.mkv.gpg
- name: Upload Artifact to github
if: always()
continue-on-error: true
+1 -1
View File
@@ -21,7 +21,7 @@ dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
ffigen:
ffigen: ^20.1.1
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
+1
View File
@@ -4,6 +4,7 @@ FROM --platform=linux/amd64 ${BASE_IMAGE} AS build
RUN mkdir -p /w/scripts/android
COPY scripts/prepare_reown.sh /w/scripts/prepare_reown.sh
COPY scripts/android/build_reown_deps.sh /w/scripts/android/build_reown_deps.sh
RUN cd $(dirname $(which flutter)) && git checkout 3.32.0
RUN /w/scripts/android/build_reown_deps.sh \
&& rm -rf /w/scripts/reown_flutter/packages/reown_core/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_sign/.dart_tool \
+9
View File
@@ -4,6 +4,15 @@ FROM --platform=linux/amd64 ${BASE_IMAGE} AS build
COPY scripts/prepare_torch.sh /w/scripts/prepare_torch.sh
COPY scripts/android/build_torch.sh /w/scripts/android/build_torch.sh
ARG UID=10001
ARG GID=10001
ARG USER=builder
RUN groupadd -g "$GID" "$USER" && \
useradd -m -u "$UID" -g "$GID" -s /bin/bash "$USER"
RUN sudo chown $UID:$GID -R /w /root
USER builder
RUN /w/scripts/android/build_torch.sh && rm -rf /w/scripts/torch_dart/simplybs
FROM --platform=linux/amd64 alpine
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
set -x -e
cd "$(dirname "$0")"
../prepare_torch.sh
cd ../torch_dart
# ./build.sh x86_64-linux-gnu
+3
View File
@@ -0,0 +1,3 @@
FROM --platform=linux/amd64 ghcr.io/cake-tech/cake_wallet:debian13-flutter3.41.9-ndkr28-go1.24.1-ruststablenightly
WORKDIR /w
+9
View File
@@ -0,0 +1,9 @@
ARG BASE_IMAGE
FROM --platform=linux/amd64 ${BASE_IMAGE} AS build
RUN mkdir -p /w/scripts
COPY scripts/build_bitbox_flutter.sh /w/scripts/build_bitbox_flutter.sh
RUN cd /w/scripts && /w/scripts/build_bitbox_flutter.sh
FROM --platform=linux/amd64 alpine
COPY --from=build /w /w
+23
View File
@@ -0,0 +1,23 @@
ARG BASE_IMAGE
ARG TORCH_IMAGE
ARG REOWN_IMAGE
ARG BITBOX_IMAGE
ARG MONERO_IMAGE
ARG MWEBD_IMAGE
ARG ZCASH_IMAGE
FROM --platform=linux/amd64 ${TORCH_IMAGE} AS torch_src
FROM --platform=linux/amd64 ${REOWN_IMAGE} AS reown_src
FROM --platform=linux/amd64 ${BITBOX_IMAGE} AS bitbox_src
FROM --platform=linux/amd64 ${MONERO_IMAGE} AS monero_src
FROM --platform=linux/amd64 ${MWEBD_IMAGE} AS mwebd_src
FROM --platform=linux/amd64 ${ZCASH_IMAGE} AS zcash_src
FROM --platform=linux/amd64 alpine
COPY --from=torch_src /w /w.top
COPY --from=reown_src /w /w.top
COPY --from=bitbox_src /w /w.top
COPY --from=monero_src /w /w.top
COPY --from=mwebd_src /w /w.top
COPY --from=zcash_src /w /w.top
+22
View File
@@ -0,0 +1,22 @@
ARG BASE_IMAGE
FROM --platform=linux/amd64 ${BASE_IMAGE} AS build
ARG UID=10001
ARG GID=10001
ARG USER=builder
RUN groupadd -g "$GID" "$USER" && \
useradd -m -u "$UID" -g "$GID" -s /bin/bash "$USER"
RUN sudo chown $UID:$GID -R /w /root
USER builder
RUN mkdir -p /w/scripts/linux
COPY scripts/prepare_moneroc.sh /w/scripts/prepare_moneroc.sh
COPY scripts/linux/build_monero_all.sh /w/scripts/linux/build_monero_all.sh
COPY scripts/functions.sh /w/scripts/functions.sh
RUN /w/scripts/linux/build_monero_all.sh \
&& rm -rf /w/scripts/monero_c/contrib/depends/simplybs \
/w/scripts/monero_c/monero_libwallet2_api_c/build \
/w/scripts/monero_c/wownero_libwallet2_api_c/build
FROM --platform=linux/amd64 alpine
COPY --from=build /w /w
+15
View File
@@ -0,0 +1,15 @@
ARG BASE_IMAGE
FROM --platform=linux/amd64 ${BASE_IMAGE} AS build
RUN mkdir -p /w/scripts/android
COPY pubspec_base.yaml /w/pubspec.yaml
# COPY pubspec_overrides.yaml /w/pubspec_overrides.yaml
# COPY pubspec_overrides.yaml /w/cw_mweb/pubspec_overrides.yaml
COPY cw_mweb/pubspec.yaml /w/cw_mweb/pubspec.yaml
COPY cw_mweb/ffigen_config.yaml /w/cw_mweb/ffigen_config.yaml
COPY cw_mweb/go /w/cw_mweb/go
COPY scripts/android/build_mwebd.sh /w/scripts/android/build_mwebd.sh
RUN /w/scripts/android/build_mwebd.sh
FROM --platform=linux/amd64 alpine
COPY --from=build /w /w
+22
View File
@@ -0,0 +1,22 @@
ARG BASE_IMAGE
FROM --platform=linux/amd64 ${BASE_IMAGE} AS build
RUN mkdir -p /w/scripts/android
COPY scripts/prepare_reown.sh /w/scripts/prepare_reown.sh
COPY scripts/android/build_reown_deps.sh /w/scripts/android/build_reown_deps.sh
RUN cd $(dirname $(which flutter)) && git checkout 3.32.0
RUN /w/scripts/android/build_reown_deps.sh \
&& rm -rf /w/scripts/reown_flutter/packages/reown_core/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_sign/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_cli/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_walletkit/example/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_walletkit/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_yttrium/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_appkit/example/base/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_appkit/example/modal/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/packages/reown_appkit/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/.dart_tool \
&& rm -rf /w/scripts/reown_flutter/scripts/yttrium/target
FROM --platform=linux/amd64 alpine
COPY --from=build /w /w
+20
View File
@@ -0,0 +1,20 @@
ARG BASE_IMAGE
FROM --platform=linux/amd64 ${BASE_IMAGE} AS build
COPY scripts/prepare_torch.sh /w/scripts/prepare_torch.sh
COPY scripts/linux/build_torch.sh /w/scripts/linux/build_torch.sh
ARG UID=10001
ARG GID=10001
ARG USER=builder
RUN groupadd -g "$GID" "$USER" && \
useradd -m -u "$UID" -g "$GID" -s /bin/bash "$USER"
RUN sudo chown $UID:$GID -R /w /root
USER builder
RUN /w/scripts/prepare_torch.sh
FROM --platform=linux/amd64 alpine
COPY --from=build /w /w
+10
View File
@@ -0,0 +1,10 @@
ARG BASE_IMAGE
FROM --platform=linux/amd64 ${BASE_IMAGE} AS build
RUN mkdir -p /w/scripts/linux
COPY scripts/prepare_zcash.sh /w/scripts/prepare_zcash.sh
COPY scripts/linux/build_zcash.sh /w/scripts/linux/build_zcash.sh
RUN /w/scripts/linux/build_zcash.sh
FROM --platform=linux/amd64 alpine
COPY --from=build /w /w
+113
View File
@@ -0,0 +1,113 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname $0)"
CW_DOCKER_REGISTRY="${CW_DOCKER_REGISTRY:-localhost/cake-tech/cake_wallet}"
CW_DOCKER_USE_CLOUD="${CW_DOCKER_USE_CLOUD:-}"
SCRIPT_DIR="$(pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
image_exists() {
docker image inspect "$1" &>/dev/null
}
tinysha() {
cat "$@" | sha256sum | cut -c1-6
}
build() {
local name="$1"; shift
local version=$1; shift
if [[ "x$CW_DOCKER_USE_CLOUD" == "xtrue" ]]
then
set +e
docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | \
grep "^${CW_DOCKER_REGISTRY}:linux-deps-amd64-" | \
awk '{print $2}' | \
xargs -r docker rmi
docker pull "$CW_DOCKER_REGISTRY:linux-deps-amd64-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}"
set -e
fi
if image_exists "$CW_DOCKER_REGISTRY:linux-deps-amd64-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}"; then
echo "==> skipping $name (image already exists)"
return 0
fi
echo "==> building $name"
docker build \
--platform linux/amd64 \
--file "$SCRIPT_DIR/Dockerfile.${name}" \
--tag "$CW_DOCKER_REGISTRY:linux-deps-amd64-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}" \
"$@" \
"$REPO_ROOT"
if [[ "x$CW_DOCKER_USE_CLOUD" == "xtrue" ]]
then
docker push "$CW_DOCKER_REGISTRY:linux-deps-amd64-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}"
fi
}
img() {
echo "$CW_DOCKER_REGISTRY:linux-deps-amd64-${1}-$(tinysha "$SCRIPT_DIR/Dockerfile.${1}")-${2}"
}
base_ver="latest"
torch_ver="$(tinysha $SCRIPT_DIR/Dockerfile.torch $REPO_ROOT/scripts/prepare_torch.sh $REPO_ROOT/scripts/linux/build_torch.sh)"
reown_ver=$(tinysha $SCRIPT_DIR/Dockerfile.reown $REPO_ROOT/scripts/prepare_reown.sh $REPO_ROOT/scripts/android/build_reown_deps.sh)
bitbox_ver=$(tinysha $SCRIPT_DIR/Dockerfile.bitbox $REPO_ROOT/scripts/build_bitbox_flutter.sh)
monero_ver=$(tinysha $SCRIPT_DIR/Dockerfile.monero $REPO_ROOT/scripts/prepare_moneroc.sh $REPO_ROOT/scripts/linux/build_monero_all.sh)
mwebd_ver=$(tinysha $SCRIPT_DIR/Dockerfile.mwebd $REPO_ROOT/cw_mweb/pubspec.yaml $(find $REPO_ROOT/cw_mweb/go -type f))
zcash_ver=$(tinysha $SCRIPT_DIR/Dockerfile.zcash $REPO_ROOT/scripts/prepare_zcash.sh $REPO_ROOT/scripts/linux/build_zcash.sh)
echo $base_ver $torch_ver $reown_ver $bitbox_ver $monero_ver $mwebd_ver $zcash_ver > /tmp/docker_build_versions
final_ver=$(tinysha /tmp/docker_build_versions)
docker create --name temp_extract $(img final $final_ver) \
&& cd $REPO_ROOT \
&& docker cp temp_extract:/w.top w.top \
&& rsync -av w.top/ . \
&& rm -rf w.top \
&& docker rm temp_extract \
&& echo "cache ok" \
&& exit 0 \
|| echo "cache miss oh"
docker rm temp_extract || true
build base "$base_ver"
build bitbox "$bitbox_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
build mwebd "$mwebd_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
build reown "$reown_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
build monero "$monero_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
build zcash "$zcash_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
build torch "$torch_ver" \
--build-arg BASE_IMAGE="$(img base "$base_ver")"
build final $final_ver \
--build-arg BASE_IMAGE="$(img base $base_ver)" \
--build-arg TORCH_IMAGE="$(img torch $torch_ver)" \
--build-arg REOWN_IMAGE="$(img reown $reown_ver)" \
--build-arg BITBOX_IMAGE="$(img bitbox $bitbox_ver)" \
--build-arg MONERO_IMAGE="$(img monero $monero_ver)" \
--build-arg MWEBD_IMAGE="$(img mwebd $mwebd_ver)" \
--build-arg ZCASH_IMAGE="$(img zcash $zcash_ver)"
echo "done: $(img final $final_ver)"
echo $(img final $final_ver) > /tmp/cakewallet_docker
docker create --name temp_extract $(img final $final_ver) \
&& cd $REPO_ROOT \
&& docker cp temp_extract:/w.top w.top \
&& rsync -av w.top/ . \
&& rm -rf w.top \
&& docker rm temp_extract \
&& echo "cache ok" \
&& exit 0
echo idk.
exit 1
+1 -1
View File
@@ -7,7 +7,7 @@ cd "$(dirname "$0")"
# - .github/workflows/pr_test_build_linux.yml
# https://github.com/MrCyjaneK/torch_dart/releases/download/v1.0.17/torch_dart-v1.0.17.tar.gz
HASH=f48a45113ca556b73d8e80ef88012780ced82bcc
HASH=79e5361f43b8aadd340d2900009cf09590b2a0bb
if [[ ! -d "torch_dart/.git" ]];
then