From 7abf28d87c74f4b8c88ddb2b64d032b978cd095f Mon Sep 17 00:00:00 2001 From: SomeRandomDevopsGuy Date: Mon, 2 Sep 2024 13:08:32 +0200 Subject: [PATCH] feat: Cross-Platform Binary Build and S3 Upload GitHub Action (#5) * add CI * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy * add deploy --------- Co-authored-by: SomeRandomDevopsGuy --- .github/workflows/depends.yml | 127 ++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 .github/workflows/depends.yml diff --git a/.github/workflows/depends.yml b/.github/workflows/depends.yml new file mode 100644 index 000000000..edea20d5e --- /dev/null +++ b/.github/workflows/depends.yml @@ -0,0 +1,127 @@ +name: ci/gh-actions/depends + +on: + push: + paths-ignore: + - 'docs/**' + - '**/README.md' + pull_request: + paths-ignore: + - 'docs/**' + - '**/README.md' + +env: + APT_SET_CONF: | + echo "Acquire::Retries \"3\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom + echo "Acquire::http::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom + echo "Acquire::ftp::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom + CCACHE_SETTINGS: | + ccache --max-size=150M + ccache --set-config=compression=true + USE_DEVICE_TREZOR_MANDATORY: ON + +jobs: + build-cross: + runs-on: ubuntu-20.04 + env: + CCACHE_TEMPDIR: /tmp/.ccache-temp + strategy: + fail-fast: false + matrix: + toolchain: + - name: "RISCV 64bit" + host: "riscv64-linux-gnu" + packages: "python3 gperf g++-riscv64-linux-gnu" + - name: "ARM v7" + host: "arm-linux-gnueabihf" + packages: "python3 gperf g++-arm-linux-gnueabihf" + - name: "ARM v8" + host: "aarch64-linux-gnu" + packages: "python3 gperf g++-aarch64-linux-gnu" + - name: "i686 Win" + host: "i686-w64-mingw32" + packages: "python3 g++-mingw-w64-i686" + - name: "i686 Linux" + host: "i686-pc-linux-gnu" + packages: "gperf cmake g++-multilib python3-zmq" + - name: "Win64" + host: "x86_64-w64-mingw32" + packages: "cmake python3 g++-mingw-w64-x86-64" + - name: "x86_64 Linux" + host: "x86_64-unknown-linux-gnu" + packages: "gperf cmake python3-zmq libdbus-1-dev libharfbuzz-dev" + - name: "Cross-Mac x86_64" + host: "x86_64-apple-darwin" + packages: "cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev python3-setuptools-git" + - name: "Cross-Mac aarch64" + host: "aarch64-apple-darwin" + packages: "cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev python3-setuptools-git" + - name: "x86_64 Freebsd" + host: "x86_64-unknown-freebsd" + packages: "clang-8 gperf cmake python3-zmq libdbus-1-dev libharfbuzz-dev" + # - name: "ARMv8 Android" + # host: "aarch64-linux-android" + # packages: "gperf cmake python3" + name: ${{ matrix.toolchain.name }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: recursive +# Most volatile cache + - name: ccache + uses: actions/cache@v4 + with: + path: ~/.ccache + key: ccache-${{ matrix.toolchain.host }}-${{ github.sha }} + restore-keys: ccache-${{ matrix.toolchain.host }}- +# Less volatile cache + - name: depends cache + uses: actions/cache@v4 + with: + path: contrib/depends/built + key: depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/depends/packages/*') }} + restore-keys: | + depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/depends/packages/*') }} + depends-${{ matrix.toolchain.host }}- +# Static cache + - name: OSX SDK cache + uses: actions/cache@v4 + with: + path: contrib/depends/sdk-sources + key: sdk-${{ matrix.toolchain.host }}-${{ matrix.toolchain.osx_sdk }} + restore-keys: sdk-${{ matrix.toolchain.host }}-${{ matrix.toolchain.osx_sdk }} + - name: set apt conf + run: ${{env.APT_SET_CONF}} + - name: install dependencies + run: sudo apt update; sudo apt -y install build-essential libtool libssl-dev cmake autotools-dev automake pkg-config bsdmainutils curl git ca-certificates ccache ${{ matrix.toolchain.packages }} + - name: prepare w64-mingw32 + if: ${{ matrix.toolchain.host == 'x86_64-w64-mingw32' || matrix.toolchain.host == 'i686-w64-mingw32' }} + run: | + sudo update-alternatives --set ${{ matrix.toolchain.host }}-g++ $(which ${{ matrix.toolchain.host }}-g++-posix) + sudo update-alternatives --set ${{ matrix.toolchain.host }}-gcc $(which ${{ matrix.toolchain.host }}-gcc-posix) + - name: build + run: | + ${{env.CCACHE_SETTINGS}} + make depends target=${{ matrix.toolchain.host }} -j2 + - uses: actions/upload-artifact@v4 + if: ${{ matrix.toolchain.host == 'x86_64-w64-mingw32' || matrix.toolchain.host == 'x86_64-apple-darwin' || matrix.toolchain.host == 'aarch64-apple-darwin' || matrix.toolchain.host == 'x86_64-unknown-linux-gnu' }} + with: + name: ${{ matrix.toolchain.name }} + path: | + /home/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/build/${{ matrix.toolchain.host }}/release/bin/salvium-wallet-cli* + /home/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/build/${{ matrix.toolchain.host }}/release/bin/salviumd* + - name: zip daemon & cli + run: | + zip salvium-${GITHUB_REF_NAME}-${{ matrix.toolchain.host }}.zip /home/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/build/${{ matrix.toolchain.host }}/release/bin/salvium-wallet-rpc* /home/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/build/${{ matrix.toolchain.host }}/release/bin/salvium-wallet-cli* /home/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/build/${{ matrix.toolchain.host }}/release/bin/salviumd* + ls -l + - name: "Deploy" + uses: keithweaver/aws-s3-github-action@v1.0.0 + with: + command: cp + source: ./salvium-${{ github.ref_name }}-${{ matrix.toolchain.host }}.zip + destination: s3://${{ vars.S3_BUCKET }}/salvium-${{ github.ref_name }}-${{ matrix.toolchain.host }}.zip + aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws_region: eu-west-1 + flags: --acl public-read \ No newline at end of file