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 # Rustc flags needed by the `all` features RUSTFLAGS: "--cfg tokio_unstable" # SWS features for Cargo build CARGO_FEATURES: "--features=all" 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 }} build --bin static-web-server -vv --release ${{ env.CARGO_FEATURES }} ${{ 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