CI - Rust #122
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI - Rust | |
on: | |
workflow_call: | |
inputs: | |
release: | |
required: false | |
type: string | |
default: false | |
branch: | |
required: false | |
type: string | |
default: trunk | |
secrets: | |
SELENIUM_CI_TOKEN: | |
required: true | |
workflow_dispatch: | |
jobs: | |
build: | |
name: Build | |
uses: ./.github/workflows/bazel.yml | |
with: | |
name: Build | |
cache-key: rust-build | |
run: bazel build //rust:selenium-manager | |
tests: | |
name: Tests | |
needs: build | |
uses: ./.github/workflows/bazel.yml | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: macos | |
- os: ubuntu | |
- os: windows | |
with: | |
name: Tests (${{ matrix.os }}) | |
cache-key: rust-test | |
os: ${{ matrix.os }} | |
run: bazel test --test_env=RUST_BACKTRACE=1 --flaky_test_attempts=3 //rust/... | |
windows-stable: | |
name: "Windows Stable" | |
runs-on: windows-latest | |
needs: tests | |
if: github.event_name != 'schedule' | |
env: | |
RUSTFLAGS: '-Ctarget-feature=+crt-static' | |
steps: | |
- name: "Checkout project" | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: "Update Rust" | |
run: | | |
rustup update | |
rustup toolchain install stable-i686-pc-windows-msvc | |
rustup default stable-i686-pc-windows-msvc | |
rustc -vV | |
- name: "Build release binary" | |
run: cargo build --release | |
working-directory: rust | |
- name: "Rename binary" | |
run: mv rust/target/release/selenium-manager.exe selenium-manager-windows.exe | |
- name: "Upload release binary" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: selenium-manager-windows | |
path: selenium-manager-windows.exe | |
retention-days: 6 | |
windows-debug: | |
name: "Windows Debug" | |
runs-on: windows-latest | |
needs: tests | |
if: github.event_name != 'schedule' | |
env: | |
RUSTFLAGS: '-Ctarget-feature=+crt-static' | |
steps: | |
- name: "Checkout project" | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: "Update Rust" | |
run: | | |
rustup update | |
rustup toolchain install stable-i686-pc-windows-msvc | |
rustup default stable-i686-pc-windows-msvc | |
rustc -vV | |
- name: "Build release binary" | |
run: cargo build --profile dev | |
working-directory: rust | |
- name: "Rename binary" | |
run: mv rust/target/debug/selenium-manager.exe selenium-manager-windows-debug.exe | |
- name: "Upload release binary" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: selenium-manager-windows-debug | |
path: selenium-manager-windows-debug.exe | |
retention-days: 6 | |
linux-stable: | |
name: "Linux Stable" | |
runs-on: ubuntu-latest | |
needs: tests | |
if: github.event_name != 'schedule' | |
steps: | |
- name: "Checkout project" | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: "Update Rust" | |
run: | | |
rustup update | |
rustc -vV | |
- name: "Install cross" | |
run: | | |
cargo install cross --git https://github.com/cross-rs/cross | |
- name: "Build release binary" | |
run: cross build --target x86_64-unknown-linux-musl --release | |
working-directory: rust | |
- name: "Rename binary" | |
run: mv rust/target/x86_64-unknown-linux-musl/release/selenium-manager selenium-manager-linux | |
- name: "Upload release binary" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: selenium-manager-linux | |
path: selenium-manager-linux | |
retention-days: 6 | |
linux-debug: | |
name: "Linux Debug" | |
runs-on: ubuntu-latest | |
needs: tests | |
if: github.event_name != 'schedule' | |
steps: | |
- name: "Checkout project" | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: "Update Rust" | |
run: | | |
rustup update | |
rustc -vV | |
- name: "Install cross" | |
run: | | |
cargo install cross --git https://github.com/cross-rs/cross | |
- name: "Build release binary" | |
run: | | |
cross build --target x86_64-unknown-linux-musl --profile dev | |
cd target/x86_64-unknown-linux-musl/debug | |
tar -cvf ../../../../selenium-manager-linux-debug.tar selenium-manager | |
working-directory: rust | |
- name: "Upload release binary" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: selenium-manager-linux-debug | |
path: selenium-manager-linux-debug.tar | |
retention-days: 6 | |
macos-stable: | |
name: "MacOS Stable" | |
runs-on: macos-13 | |
needs: tests | |
if: github.event_name != 'schedule' | |
env: | |
RUSTFLAGS: '-Ctarget-feature=+crt-static' | |
MACOSX_DEPLOYMENT_TARGET: '10.12' | |
steps: | |
- name: "Checkout project" | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: "Update Rust" | |
run: | | |
rustup update | |
rustup target add aarch64-apple-darwin | |
rustc -vV | |
- name: "Build release binary" | |
run: | | |
cargo build --target x86_64-apple-darwin --release | |
cargo build --target aarch64-apple-darwin --release | |
lipo -create -output target/selenium-manager-macos \ | |
target/aarch64-apple-darwin/release/selenium-manager \ | |
target/x86_64-apple-darwin/release/selenium-manager | |
working-directory: rust | |
- name: "Upload release binary" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: selenium-manager-macos | |
path: rust/target/selenium-manager-macos | |
retention-days: 6 | |
macos-debug: | |
name: "MacOS Debug" | |
runs-on: macos-13 | |
needs: tests | |
if: github.event_name != 'schedule' | |
env: | |
RUSTFLAGS: '-Ctarget-feature=+crt-static' | |
MACOSX_DEPLOYMENT_TARGET: '10.12' | |
steps: | |
- name: "Checkout project" | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: "Update Rust" | |
run: | | |
rustup update | |
rustup target add aarch64-apple-darwin | |
rustc -vV | |
- name: "Build release binary" | |
run: | | |
cargo build --target x86_64-apple-darwin --profile dev | |
cargo build --target aarch64-apple-darwin --profile dev | |
lipo -create -output target/selenium-manager \ | |
target/aarch64-apple-darwin/debug/selenium-manager \ | |
target/x86_64-apple-darwin/debug/selenium-manager | |
cd target | |
tar -cvf ../../selenium-manager-macos-debug.tar selenium-manager | |
working-directory: rust | |
- name: "Upload release binary" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: selenium-manager-macos-debug | |
path: selenium-manager-macos-debug.tar | |
retention-days: 6 | |
release: | |
name: "Release Binaries" | |
runs-on: ubuntu-latest | |
needs: [ macos-stable, linux-stable, windows-stable, macos-debug, linux-debug, windows-debug ] | |
if: github.event_name != 'schedule' && github.repository_owner == 'seleniumhq' && (github.ref == 'refs/heads/trunk' || inputs.release == 'true') | |
steps: | |
- name: "Checkout selenium_manager_artifacts" | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.SELENIUM_CI_TOKEN }} | |
repository: SeleniumHQ/selenium_manager_artifacts | |
- name: "Download Artifacts" | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
- name: "Prepare and Commit" | |
run: | | |
linux_sha=$(shasum -a 256 artifacts/selenium-manager-linux/selenium-manager-linux | awk '{print $1}') | |
macos_sha=$(shasum -a 256 artifacts/selenium-manager-macos/selenium-manager-macos | awk '{print $1}') | |
windows_sha=$(shasum -a 256 artifacts/selenium-manager-windows/selenium-manager-windows.exe | awk '{print $1}') | |
echo "{\"macos\": \"$macos_sha\", \"windows\": \"$windows_sha\", \"linux\": \"$linux_sha\"}" > latest.json | |
git config --local user.email "[email protected]" | |
git config --local user.name "Selenium CI Bot" | |
git add latest.json | |
git commit -m "Update hash values for latest binaries" | |
short_hash=$(git rev-parse --short HEAD) | |
echo "TAG_NAME=selenium-manager-$short_hash" >> $GITHUB_ENV | |
git tag ${{ env.TAG_NAME }} | |
git push && git push --tags | |
- name: "Release" | |
uses: softprops/action-gh-release@v2 | |
with: | |
token: ${{ secrets.SELENIUM_CI_TOKEN }} | |
repository: SeleniumHQ/selenium_manager_artifacts | |
tag_name: ${{ env.TAG_NAME }} | |
draft: false | |
prerelease: false | |
files: | | |
artifacts/selenium-manager-linux/selenium-manager-linux | |
artifacts/selenium-manager-macos/selenium-manager-macos | |
artifacts/selenium-manager-windows/selenium-manager-windows.exe | |
artifacts/selenium-manager-linux-debug/selenium-manager-linux-debug.tar | |
artifacts/selenium-manager-macos-debug/selenium-manager-macos-debug.tar | |
artifacts/selenium-manager-windows-debug/selenium-manager-windows-debug.exe |