diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 623cf46..6920071 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,16 +3,19 @@ name: Release permissions: contents: write -on: - push: - tags: - - v[0-9]+.* +on: [push] + +defaults: + run: + shell: bash --noprofile --norc -CeEuo pipefail {0} + jobs: create-release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: taiki-e/create-gh-release-action@v1 + if: startsWith(github.ref, 'refs/tags/') with: token: ${{ secrets.GITHUB_TOKEN }} @@ -21,8 +24,6 @@ jobs: strategy: matrix: include: - - target: x86_64-unknown-linux-musl - os: ubuntu-latest - target: x86_64-apple-darwin os: macos-latest - target: aarch64-apple-darwin @@ -30,15 +31,92 @@ jobs: - target: x86_64-pc-windows-msvc os: windows-latest RUSTFLAGS: -C target-feature=+crt-static + - target: x86_64-pc-windows-gnu + os: windows-latest + - target: arm64ec-pc-windows-msvc + os: windows-latest - target: aarch64-unknown-linux-musl os: ubuntu-latest + # https://github.com/ahaoboy/osvg/actions/runs/11415972655/job/31766651654 + - target: aarch64-unknown-linux-gnu + os: ubuntu-latest + - target: x86_64-unknown-linux-musl + os: ubuntu-latest + - target: x86_64-unknown-linux-gnu + os: ubuntu-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 + # - uses: actions-rust-lang/setup-rust-toolchain@v1 + # with: + # rustflags: "-A warnings" + # toolchain: "nightly" + - name: Setup musl aarch64 + if: startsWith(matrix.target, 'aarch64-unknown-linux') + run: | + sudo apt-get update -y + sudo apt-get install -y \ + curl \ + libc6-arm64-cross \ + libc6-dev-arm64-cross \ + crossbuild-essential-arm64 \ + clang \ + qemu-system-arm \ + qemu-efi-aarch64 \ + qemu-utils \ + qemu-user + + curl --retry 5 https://musl.cc/aarch64-linux-musl-cross.tgz | tar xzf - + sudo mv aarch64-linux-musl-cross /musl + + echo "CC_aarch64_unknown_linux_musl=aarch64-linux-musl-gcc" >> $GITHUB_ENV + echo "CXX_aarch64_unknown_linux_musl=aarch64-linux-musl-g++" >> $GITHUB_ENV + echo "AR_aarch64_unknown_linux_musl=aarch64-linux-musl-ar" >> $GITHUB_ENV + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-musl-gcc" >> $GITHUB_ENV + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER=qemu-aarch64" >> $GITHUB_ENV + + echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV + echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV + echo "AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar" >> $GITHUB_ENV + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER=qemu-aarch64" >> $GITHUB_ENV + + echo "LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib" >> $GITHUB_ENV + + sudo ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1 + + mkdir -p ~/.cargo/ + echo "[target.aarch64-unknown-linux-musl]" >> ~/.cargo/config.toml + echo 'rustflags = ["-C", "link-self-contained=yes","-C", "linker=rust-lld"]' >> ~/.cargo/config.toml + echo "[target.aarch64-unknown-linux-gnu]" >> ~/.cargo/config.toml + echo 'rustflags = ["-C", "linker=aarch64-linux-gnu-gcc"]' >> ~/.cargo/config.toml + + echo "/musl/bin" >> $GITHUB_PATH - uses: taiki-e/upload-rust-binary-action@v1 with: + dry-run: ${{ !startsWith(github.ref, 'refs/tags/') }} bin: osvg target: ${{ matrix.target }} token: ${{ secrets.GITHUB_TOKEN }} + # ref: refs/tags/dummy + ref: ${{ startsWith(github.ref, 'refs/tags/') && github.ref || 'refs/tags/dummy' }} + features: cli env: - RUSTFLAGS: ${{ matrix.RUSTFLAGS }} \ No newline at end of file + RUSTFLAGS: ${{ matrix.RUSTFLAGS }} + - name: Get target name for artifact + id: artifact-target + run: | + target="${{ matrix.target }}" + if [[ -z "${target}" ]]; then + host=$(rustc -vV | grep -E '^host:' | cut -d' ' -f2) + printf '%s\n' "artifact-target=${host}" >>"${GITHUB_OUTPUT}" + elif [[ "${{ matrix.build-tool }}" == 'cargo-zigbuild' ]]; then + printf '%s\n' "artifact-target=${target%%.*}" >>"${GITHUB_OUTPUT}" + else + printf '%s\n' "artifact-target=${target}" >>"${GITHUB_OUTPUT}" + fi + # For debugging + - uses: actions/upload-artifact@v4 + with: + name: osvg-${{ steps.artifact-target.outputs.artifact-target }} + path: osvg-${{ steps.artifact-target.outputs.artifact-target }}.*