Skip to content

fix

fix #749

name: Build and Upload
on: [push]
jobs:
build:
strategy:
matrix:
include:
- os: ubuntu-20.04
target: x86_64-unknown-linux-musl
dir: musl
- os: ubuntu-20.04
target: aarch64-unknown-linux-musl
dir: musl-arm64
- os: ubuntu-20.04
target: x86_64-unknown-linux-gnu
dir: gnu
# - os: windows-latest
# target: i686-pc-windows-msvc
# dir: windows
- os: macos-latest
target: x86_64-apple-darwin
dir: macos
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install musl-tools (Linux)
if: ${{ matrix.dir == 'musl' }}
run: sudo apt-get install -y musl-tools
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
target: ${{ matrix.target }}
- name: Install cross (only for arm64)
if: ${{ matrix.target == 'aarch64-unknown-linux-musl' }}
run: cargo install cross
- name: Cache cargo build
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
prefix-key: "lele"
- name: Build client
run: |
if [ "${{ matrix.target }}" = "aarch64-unknown-linux-musl" ]; then
cross build --locked --release --target "${{ matrix.target }}" --manifest-path binaries/geph5-client/Cargo.toml
else
cargo build --locked --release --target "${{ matrix.target }}" --manifest-path binaries/geph5-client/Cargo.toml
fi
- name: Move client binaries to artifacts directory
shell: bash
run: |
mkdir -p artifacts/${{ matrix.dir }}
mv target/${{ matrix.target }}/release/geph5-client artifacts/${{ matrix.dir }}/
- name: Install cargo-bundle
if: matrix.os == 'macos-latest'
run: cargo install cargo-bundle --locked --version "=0.6.0" --force
- name: Create macOS .app bundle
if: matrix.os == 'macos-latest'
run: |
cd binaries/geph5-client-gui
cargo bundle --release --target ${{ matrix.target }}
- name: Create macOS .app zip
if: matrix.os == 'macos-latest'
run: |
cd target/${{ matrix.target }}/release/bundle/osx/
zip -r "geph5-client-gui.app.zip" "Geph5.app"
mv "geph5-client-gui.app.zip" ../../../../../artifacts/${{ matrix.dir }}/
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.dir }}-latest
path: artifacts/${{ matrix.dir }}
build-bridge-exit:
name: Build Bridge, Exit, and Broker (Musl)
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install musl-tools
run: sudo apt-get install -y musl-tools
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
target: x86_64-unknown-linux-musl
- name: Set default host
shell: bash
run: rustup set default-host x86_64-unknown-linux-musl
- name: Cache cargo build
uses: Swatinem/rust-cache@v2
with:
key: x86_64-unknown-linux-musl-bridge-exit
- name: Build bridge and exit and broker
run: |
cargo build --locked --release --target x86_64-unknown-linux-musl --manifest-path binaries/geph5-bridge/Cargo.toml
cargo build --locked --release --target x86_64-unknown-linux-musl --manifest-path binaries/geph5-exit/Cargo.toml
cargo build --locked --release --target x86_64-unknown-linux-musl --manifest-path binaries/geph5-broker/Cargo.toml
- name: Move bridge and exit binaries to artifacts directory
run: |
mkdir -p artifacts/musl
mv target/x86_64-unknown-linux-musl/release/geph5-bridge artifacts/musl/
mv target/x86_64-unknown-linux-musl/release/geph5-broker artifacts/musl/
mv target/x86_64-unknown-linux-musl/release/geph5-exit artifacts/musl/
- name: Upload bridge and exit artifacts
uses: actions/upload-artifact@v3
with:
name: musl-latest
path: artifacts/musl
# build-windows-gui:
# runs-on: windows-latest
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
#
# - name: Install Rust
# uses: actions-rs/toolchain@v1
# with:
# profile: minimal
# toolchain: stable
# override: true
# target: i686-pc-windows-msvc
#
# - name: Set default host
# shell: bash
# run: rustup set default-host i686-pc-windows-msvc
#
# - name: Cache cargo build
# uses: Swatinem/rust-cache@v2
# with:
# key: i686-pc-windows-msvc-gui
#
# - name: Build Windows GUI client
# run: |
# cargo build --locked --release --target i686-pc-windows-msvc --manifest-path binaries/geph5-client/Cargo.toml --all-features
# cargo build --locked --release --target i686-pc-windows-msvc --manifest-path binaries/geph5-client-gui/Cargo.toml
#
# - name: Build Windows installer
# shell: bash
# run: |
# choco install innosetup
# cp target/i686-pc-windows-msvc/release/geph5-client-gui packaging/windows
# cp target/i686-pc-windows-msvc/release/geph5-client packaging/windows
# cp binaries/geph5-client/windows-lib/* packaging/windows
# iscc packaging/windows/setup.iss
#
# - name: Move Windows GUI artifacts
# shell: bash
# run: |
# mkdir -p artifacts/windows-gui
# cp packaging/windows/Output/* artifacts/windows-gui/
# cp target/i686-pc-windows-msvc/release/geph5-client-gui artifacts/windows-gui/
#
# - name: Upload Windows GUI artifact
# uses: actions/upload-artifact@v3
# with:
# name: windows-gui-latest
# path: artifacts/windows-gui
upload:
if: github.ref == 'refs/heads/master'
needs: [build, build-bridge-exit]
runs-on: ubuntu-20.04
strategy:
matrix:
include:
- dir: gnu
- dir: musl
- dir: musl-arm64
- dir: macos
# - dir: windows
# - dir: windows-gui
steps:
- name: Download all artifacts
uses: actions/download-artifact@v3
with:
path: artifacts
- name: Set up AWS configuration
run: |
aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws configure set region apac
aws configure set output json
- name: Upload to Cloudflare R2
run: |
aws s3 cp ./artifacts/${{ matrix.dir }}-latest s3://geph5/${{ matrix.dir }}-latest --recursive --endpoint-url=https://b5e397a549f0e6543dba8e1d83ca9924.r2.cloudflarestorage.com