From 680323c98f65469b6362f3c89295684350e83d73 Mon Sep 17 00:00:00 2001 From: Jose Quintana <1700322+joseluisq@users.noreply.github.com> Date: Tue, 14 Nov 2023 23:43:40 +0100 Subject: [PATCH] chore: manual release build ci workflow (#288) --- .github/workflows/release.build.manual.yml | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 .github/workflows/release.build.manual.yml diff --git a/.github/workflows/release.build.manual.yml b/.github/workflows/release.build.manual.yml new file mode 100644 index 0000000..92916f8 --- /dev/null +++ b/.github/workflows/release.build.manual.yml @@ -0,0 +1,197 @@ +name: release-build-manual +on: + pull_request: + types: + - labeled + +jobs: + build: + name: build + environment: release-build-manual + if: contains(github.event.label.name, 'release:manual:v2.') + runs-on: ${{ matrix.os }} + env: + # For some builds, we use cross to test on 32-bit and big-endian + # systems. + CARGO_BIN: cargo + # When CARGO_BIN is set to CROSS, this is set to `--target matrix.target`. + TARGET_FLAGS: "" + # When CARGO_BIN is set to CROSS, TARGET_DIR includes matrix.target. + TARGET_DIR: ./target + # Emit backtraces on panics. + RUST_BACKTRACE: 1 + strategy: + matrix: + build: + - windows-msvc-arm64 + include: + # - build: linux-musl + # os: ubuntu-22.04 + # rust: stable + # target: x86_64-unknown-linux-musl + # - build: linux-musl-i686 + # os: ubuntu-22.04 + # rust: stable + # target: i686-unknown-linux-musl + # - build: linux-musl-arm64 + # os: ubuntu-22.04 + # rust: stable + # target: aarch64-unknown-linux-musl + # - build: linux-gnu + # os: ubuntu-22.04 + # rust: stable + # target: x86_64-unknown-linux-gnu + # - build: linux-gnu-i686 + # os: ubuntu-22.04 + # rust: stable + # target: i686-unknown-linux-gnu + # - build: linux-gnu-arm64 + # os: ubuntu-22.04 + # rust: stable + # target: aarch64-unknown-linux-gnu + # - build: linux-arm-gnueabihf + # os: ubuntu-22.04 + # rust: stable + # target: arm-unknown-linux-gnueabihf + # - build: linux-musl-armv6 + # os: ubuntu-22.04 + # rust: stable + # target: arm-unknown-linux-musleabihf + # - build: linux-musl-armv7 + # os: ubuntu-22.04 + # rust: stable + # target: armv7-unknown-linux-musleabihf + # - build: linux-ppc64le + # os: ubuntu-22.04 + # rust: stable + # target: powerpc64le-unknown-linux-gnu + # - build: linux-s390x + # os: ubuntu-22.04 + # rust: stable + # target: s390x-unknown-linux-gnu + # # - build: linux-android-armv7 + # # os: ubuntu-22.04 + # # rust: stable + # # target: armv7-linux-androideabi + # - build: linux-android-arm64 + # os: ubuntu-22.04 + # rust: stable + # target: aarch64-linux-android + # - build: netbsd + # os: ubuntu-22.04 + # rust: stable + # target: x86_64-unknown-netbsd + # - build: illumos + # os: ubuntu-22.04 + # rust: stable + # target: x86_64-unknown-illumos + # - build: macos + # os: macos-12 + # rust: stable + # target: x86_64-apple-darwin + # - build: macos-arm64 + # os: macos-12 + # rust: stable + # target: aarch64-apple-darwin + - build: windows-msvc + os: windows-2022 + rust: stable + target: x86_64-pc-windows-msvc + - build: windows-msvc-i686 + os: windows-2022 + rust: stable + target: i686-pc-windows-msvc + - build: windows-msvc-arm64 + os: windows-2022 + rust: stable + target: aarch64-pc-windows-msvc + # - build: windows-pc-gnu + # os: windows-2022 + # rust: stable-x86_64-gnu + # target: x86_64-pc-windows-gnu + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 1 + + - name: Install Linux/BSD tools + if: ${{ !contains(matrix.os, 'windows') }} + run: scripts/ci/install_tools.sh --target=${{ matrix.target }} + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ matrix.rust }} + target: ${{ matrix.target }} + + - name: Set up Cross + shell: bash + run: | + if [ "${{ matrix.os }}" = "ubuntu-22.04" ]; then + # Use 'cargo.sh' script for Android targets only + if [[ "${{ matrix.build }}" == "linux-android-armv7" ]] || [[ "${{ matrix.build }}" == "linux-android-arm64" ]]; then + echo "CARGO_BIN=scripts/ci/cargo.sh" >> $GITHUB_ENV + else + cargo install cross@^0.2 + echo "CARGO_BIN=cross" >> $GITHUB_ENV + fi + fi + echo "TARGET_FLAGS=--target=${{ matrix.target }}" >> $GITHUB_ENV + echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV + + - name: Setup Windows ARM64 + if: ${{ contains(matrix.build, 'windows-msvc-arm64') }} + run: | + # ring crate: add Visual Studio Build Tools "VS 2022 C++ ARM64 build tools" and "clang" components + $env:Path += ";C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\VC\Tools\Llvm\x64\bin" + + - name: Show command used for Cargo + run: | + echo "cargo command is: ${{ env.CARGO_BIN }}" + echo "target flag is: ${{ env.TARGET_FLAGS }}" + echo "target dir is: ${{ env.TARGET_DIR }}" + + - name: Build release binary + run: ${{ env.CARGO_BIN }} rustc --bin static-web-server --verbose --release ${{ env.TARGET_FLAGS }} + + - name: Prepare Docker envs + shell: bash + run: | + version=${{ github.event.label.name }} + semver=${version#*release:manual:v} + echo "SEMVER=$semver" >> $GITHUB_ENV + echo "SEMVER_MAJOR=${semver%.*.*}" >> $GITHUB_ENV + echo "SEMVER_MINOR=${semver%.*}" >> $GITHUB_ENV + + - name: Build archive + shell: bash + run: | + staging="static-web-server-${{ env.SEMVER }}-${{ matrix.target }}" + mkdir -p "$staging/" + mkdir -p bin + + cp {README.md,LICENSE-APACHE,LICENSE-MIT} "$staging/" + + if [ "${{ matrix.os }}" = "windows-2022" ]; then + cp "target/${{ matrix.target }}/release/static-web-server.exe" "$staging/" + 7z a "$staging.zip" "$staging" + echo "ASSET=$staging.zip" >> $GITHUB_ENV + else + # The man page is only generated on Unix systems. + cp "target/${{ matrix.target }}/release/static-web-server" "$staging/" + cp "$staging/static-web-server" bin/ + tar czf "$staging.tar.gz" "$staging" + echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV + fi + + - name: Upload release archive + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ secrets.RELEASE_UPLOAD_URL }} + asset_path: ${{ env.ASSET }} + asset_name: ${{ env.ASSET }} + asset_content_type: application/octet-stream -- libgit2 1.7.2