Migrate CI to GitHub Actions This involves less secret and user management than azure pipelines, has more concurrency by default for repos, and in general has a bit more modern syntax!
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..9225963 --- /dev/null +++ b/.github/workflows/main.yml
@@ -0,0 +1,204 @@ +name: CI +on: + push: + branches: + - auto + - try + pull_request: + branches: + - master + +jobs: + style: + name: Check Style + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Install Rust + run: rustup update nightly && rustup default nightly + - run: ci/style.sh + + docs: + name: Build Documentation + needs: [style] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Install Rust + run: rustup update nightly && rustup default nightly + - run: ci/dox.sh + env: + CI: 1 + - name: Publish documentation + run: | + cd target/doc + git init + git add . + git -c user.name='ci' -c user.email='ci' commit -m init + git push -f -q https://git:${{ secrets.github_token }}@github.com/${{ github.repository }} HEAD:gh-pages + if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' + + verify: + name: Automatic intrinsic verification + needs: [style] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Install Rust + run: rustup update nightly && rustup default nightly + - run: cargo test --manifest-path crates/stdarch-verify/Cargo.toml + + env_override: + name: Env Override + needs: [style] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Install Rust + run: rustup update nightly && rustup default nightly + - run: RUST_STD_DETECT_UNSTABLE=avx cargo test --features=std_detect_env_override --manifest-path crates/std_detect/Cargo.toml env_override_no_avx + + test: + needs: [style] + name: Test + runs-on: ${{ matrix.os }} + strategy: + max-parallel: 10 + matrix: + target: + # Dockers that are run through docker on linux + - i686-unknown-linux-gnu + - x86_64-unknown-linux-gnu + - x86_64-unknown-linux-gnu-emulated + - arm-unknown-linux-gnueabihf + - armv7-unknown-linux-gnueabihf + - aarch64-unknown-linux-gnu + - powerpc64le-unknown-linux-gnu + - mips-unknown-linux-gnu + - mips64-unknown-linux-gnuabi64 + - mips64el-unknown-linux-gnuabi64 + - s390x-unknown-linux-gnu + - wasm32-unknown-unknown + - i586-unknown-linux-gnu + - x86_64-linux-android + - arm-linux-androideabi + - mipsel-unknown-linux-musl + - aarch64-linux-android + - nvptx64-nvidia-cuda + - thumbv6m-none-eabi + - thumbv7m-none-eabi + - thumbv7em-none-eabi + - thumbv7em-none-eabihf + + # macOS targets + - x86_64-apple-darwin + # FIXME: gh-actions build environment doesn't have linker support + # - i686-apple-darwin + + # Windows targets + - x86_64-pc-windows-msvc + # FIXME: Disassembly not implemented for the # following targets: + # - x86_64-pc-windows-gnu: + # - i686-pc-windows-gnu: + # - i686-pc-windows-msvc: + + include: + - target: i686-unknown-linux-gnu + os: ubuntu-latest + - target: x86_64-unknown-linux-gnu + os: ubuntu-latest + - target: x86_64-unknown-linux-gnu-emulated + os: ubuntu-latest + test_everything: true + rustflags: --cfg stdarch_intel_sde + - target: arm-unknown-linux-gnueabihf + os: ubuntu-latest + - target: armv7-unknown-linux-gnueabihf + os: ubuntu-latest + rustflags: -C target-feature=+neon + - target: mips-unknown-linux-gnu + os: ubuntu-latest + norun: true + - target: mips64-unknown-linux-gnuabi64 + os: ubuntu-latest + norun: true + - target: mips64el-unknown-linux-gnuabi64 + os: ubuntu-latest + norun: true + - target: powerpc64le-unknown-linux-gnu + os: ubuntu-latest + disable_assert_instr: true + - target: s390x-unknown-linux-gnu + os: ubuntu-latest + - target: wasm32-unknown-unknown + os: ubuntu-latest + - target: aarch64-unknown-linux-gnu + os: ubuntu-latest + - target: x86_64-apple-darwin + os: macos-latest + - target: x86_64-pc-windows-msvc + os: windows-latest + - target: i586-unknown-linux-gnu + os: ubuntu-latest + - target: x86_64-linux-android + os: ubuntu-latest + disable_assert_instr: 1 + - target: arm-linux-androideabi + os: ubuntu-latest + disable_assert_instr: 1 + - target: mipsel-unknown-linux-musl + os: ubuntu-latest + norun: 1 + - target: aarch64-linux-android + os: ubuntu-latest + disable_assert_instr: 1 + - target: nvptx64-nvidia-cuda + os: ubuntu-latest + - target: thumbv6m-none-eabi + os: ubuntu-latest + - target: thumbv7m-none-eabi + os: ubuntu-latest + - target: thumbv7em-none-eabi + os: ubuntu-latest + - target: thumbv7em-none-eabihf + os: ubuntu-latest + + steps: + - uses: actions/checkout@master + - name: Install Rust (rustup) + run: rustup update nightly --no-self-update && rustup default nightly + if: matrix.os != 'macos-latest' + - name: Install Rust (macos) + run: | + curl https://sh.rustup.rs | sh -s -- -y --default-toolchain nightly + echo "##[add-path]$HOME/.cargo/bin" + if: matrix.os == 'macos-latest' + - run: rustup target add ${{ matrix.target }} + if: "!endsWith(matrix.target, 'emulated')" + - run: cargo generate-lockfile + + # Configure some env vars based on matrix configuration + - run: echo "##[set-env name=NORUN]1" + if: matrix.norun != '' || startsWith(matrix.target, 'thumb') || matrix.target == 'nvptx64-nvidia-cuda' + - run: echo "##[set-env name=STDARCH_TEST_EVERYTHING]1" + if: matrix.test_everything != '' + - run: echo "##[set-env name=RUSTFLAGS]${{ matrix.rustflags }}" + if: matrix.rustflags != '' + - run: echo "##[set-env name=STDARCH_DISABLE_ASSERT_INSTR]1" + if: matrix.disable_assert_instr != '' + - run: echo "##[set-env name=NOSTD]1" + if: startsWith(matrix.target, 'thumb') || matrix.target == 'nvptx64-nvidia-cuda' + + # Windows & OSX go straight to `run.sh` ... + - run: ./ci/run.sh + shell: bash + if: matrix.os != 'ubuntu-latest' || startsWith(matrix.target, 'thumb') + env: + TARGET: ${{ matrix.target }} + + # ... while Linux goes to `run-docker.sh` + - run: ./ci/run-docker.sh ${{ matrix.target }} + shell: bash + if: "matrix.os == 'ubuntu-latest' && !startsWith(matrix.target, 'thumb')" + env: + TARGET: ${{ matrix.target }}
diff --git a/ci/azure-install-rust.yml b/ci/azure-install-rust.yml deleted file mode 100644 index 65743d1..0000000 --- a/ci/azure-install-rust.yml +++ /dev/null
@@ -1,76 +0,0 @@ -steps: - - bash: | - set -ex - toolchain=$TOOLCHAIN - if [ "$toolchain" = "" ]; then - toolchain=nightly - fi - if command -v rustup; then - rustup update $toolchain - rustup default $toolchain - else - curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain $toolchain - echo "##vso[task.prependpath]$HOME/.cargo/bin" - fi - displayName: Install rust (unix) - condition: ne( variables['Agent.OS'], 'Windows_NT' ) - - script: | - @echo on - if not defined TOOLCHAIN set TOOLCHAIN=nightly - rustup update --no-self-update %TOOLCHAIN%-%TARGET% - rustup default %TOOLCHAIN%-%TARGET% - displayName: Install rust (windows) - condition: eq( variables['Agent.OS'], 'Windows_NT' ) - - script: | - set -ex - if [ -n "${TARGET}" ] && [ "${TARGET}" != "x86_64-unknown-linux-gnu-emulated" ]; then - rustup target add $TARGET - fi - condition: ne( variables['Agent.OS'], 'Windows_NT' ) - displayName: Install target (unix) - - script: | - @echo on - if defined TARGET rustup target add %TARGET% - condition: eq( variables['Agent.OS'], 'Windows_NT' ) - displayName: Install target (windows) - - script: | - @echo on - if "%ARCH%" == "i686" choco install mingw --x86 --force - condition: eq( variables['Agent.OS'], 'Windows_NT' ) - displayName: Install MinGW32 (windows) - - bash: | - set -ex - gcc -print-search-dirs - find "C:\ProgramData\Chocolatey" -name "crt2*" - find "C:\ProgramData\Chocolatey" -name "dllcrt2*" - find "C:\ProgramData\Chocolatey" -name "libmsvcrt*" - condition: eq( variables['Agent.OS'], 'Windows_NT' ) - displayName: Find GCC libraries (windows) - - bash: | - set -ex - if [[ -n ${ARCH_BITS} ]]; then - for i in crt2.o dllcrt2.o libmsvcrt.a ; do - cp -f "/C/ProgramData/Chocolatey/lib/mingw/tools/install/mingw${ARCH_BITS}/${ARCH}-w64-mingw32/lib/$i" "`rustc --print sysroot`/lib/rustlib/${TARGET}/lib" - done - fi - condition: eq( variables['Agent.OS'], 'Windows_NT' ) - displayName: Fix MinGW (windows) - - bash: | - set -ex - rustc -Vv - cargo -V - rustup -Vv - rustup show - which rustc - which cargo - which rustup - displayName: Query rust and cargo versions - - script: | - @echo on - where gcc - condition: eq( variables['Agent.OS'], 'Windows_NT' ) - displayName: Query gcc path - - bash: | - set -ex - cargo generate-lockfile - displayName: Generate lockfiles
diff --git a/ci/azure.yml b/ci/azure.yml deleted file mode 100644 index 34f22a4..0000000 --- a/ci/azure.yml +++ /dev/null
@@ -1,230 +0,0 @@ -variables: - - group: secrets -resources: - repositories: - - repository: rustinfra - type: github - name: rust-lang/simpleinfra - endpoint: gnzlbg -trigger: ["auto", "try"] -pr: ["master"] - -jobs: - - job: DockerLinux0 - dependsOn: StyleAndDocs - pool: - vmImage: ubuntu-16.04 - steps: - - template: azure-install-rust.yml - - bash: | - if [ "${NO_DOCKER}" = "1" ]; then - ci/run.sh $TARGET - else - ci/run-docker.sh $TARGET - fi - displayName: Execute run-docker.sh - strategy: - matrix: - i686-unknown-linux-gnu: - TARGET: i686-unknown-linux-gnu - x86_64-unknown-linux-gnu: - TARGET: x86_64-unknown-linux-gnu - x86_64-unknown-linux-gnu-emulated: - TARGET: x86_64-unknown-linux-gnu-emulated - STDARCH_TEST_EVERYTHING: 1 - RUSTFLAGS: --cfg stdarch_intel_sde - arm-unknown-linux-gnueabihf: - TARGET: arm-unknown-linux-gnueabihf - armv7-unknown-linux-gnueabihf: - TARGET: armv7-unknown-linux-gnueabihf - RUSTFLAGS: -C target-feature=+neon - aarch64-unknown-linux-gnu: - TARGET: aarch64-unknown-linux-gnu - mips-unknown-linux-gnu: - TARGET: mips-unknown-linux-gnu - NORUN: 1 - mips64-unknown-linux-gnuabi64: - TARGET: mips64-unknown-linux-gnuabi64 - NORUN: 1 - mips64el-unknown-linux-gnuabi64: - TARGET: mips64el-unknown-linux-gnuabi64 - NORUN: 1 - powerpc64le-unknown-linux-gnu: - TARGET: powerpc64le-unknown-linux-gnu - STDARCH_DISABLE_ASSERT_INSTR: 1 - s390x-unknown-linux-gnu: - TARGET: s390x-unknown-linux-gnu - wasm32-unknown-unknown: - TARGET: wasm32-unknown-unknown - - - job: DockerLinux1 - dependsOn: DockerLinux0 - pool: - vmImage: ubuntu-16.04 - steps: - - template: azure-install-rust.yml - - bash: | - if [ "${NO_DOCKER}" = "1" ]; then - ci/run.sh $TARGET - else - ci/run-docker.sh $TARGET - fi - displayName: Execute run-docker.sh - strategy: - matrix: - i586-unknown-linux-gnu: - TARGET: i586-unknown-linux-gnu - x86_64-linux-android: - TARGET: x86_64-linux-android - STDARCH_DISABLE_ASSERT_INSTR: 1 - arm-linux-androideabi: - TARGET: arm-linux-androideabi - STDARCH_DISABLE_ASSERT_INSTR: 1 - mipsel-unknown-linux-musl: - TARGET: mipsel-unknown-linux-musl - NORUN: 1 - aarch64-linux-android: - TARGET: aarch64-linux-android - STDARCH_DISABLE_ASSERT_INSTR: 1 - #powerpc-unknown-linux-gnu: - # TARGET: powerpc-unknown-linux-gnu - # STDARCH_DISABLE_ASSERT_INSTR: 1 - #powerpc64-unknown-linux-gnu: - # TARGET: powerpc64-unknown-linux-gnu - # STDARCH_DISABLE_ASSERT_INSTR: 1 - nvptx64-nvidia-cuda: - TARGET: nvptx64-nvidia-cuda - NORUN: 1 - NOSTD: 1 - thumbv6m-none-eabi: - TARGET: thumbv6m-none-eabi - NORUN: 1 - NOSTD: 1 - NO_DOCKER: 1 - thumbv7m-none-eabi: - TARGET: thumbv7m-none-eabi - NORUN: 1 - NOSTD: 1 - NO_DOCKER: 1 - thumbv7em-none-eabi: - TARGET: thumbv7em-none-eabi - NORUN: 1 - NOSTD: 1 - NO_DOCKER: 1 - thumbv7em-none-eabihf: - TARGET: thumbv7em-none-eabihf - NORUN: 1 - NOSTD: 1 - NO_DOCKER: 1 - - - job: DockerOSX64 - pool: - vmImage: macos-10.14 - steps: - - template: azure-install-rust.yml - - bash: sh ./ci/run.sh $TARGET - displayName: Execute run.sh - strategy: - matrix: - x86_64-apple-darwin: - TARGET: x86_64-apple-darwin - NO_DOCKER: 1 - - - job: DockerOSX32 - pool: - vmImage: macos-10.13 - steps: - - template: azure-install-rust.yml - - bash: sh ./ci/run.sh $TARGET - displayName: Execute run.sh - strategy: - matrix: - i686-apple-darwin: - TARGET: i686-apple-darwin - NO_DOCKER: 1 - - - job: Windows - pool: - vmImage: vs2017-win2016 - steps: - - template: azure-install-rust.yml - - bash: sh ./ci/run.sh $TARGET - displayName: Execute run.sh - strategy: - matrix: - x86_64-pc-windows-msvc: - TARGET: x86_64-pc-windows-msvc - # FIXME: - # Disassembly no implemented for the - # following targets: - # x86_64-pc-windows-gnu: - # TARGET: x86_64-pc-windows-gnu - #i686-pc-windows-gnu: - # TARGET: i686-pc-windows-gnu - #i686-pc-windows-msvc: - # TARGET: i686-pc-windows-msvc - - - job: StyleAndDocs - pool: - vmImage: ubuntu-16.04 - steps: - - template: azure-install-rust.yml - - script: sh ci/style.sh - displayName: Check style - - script: sh ci/dox.sh - displayName: Generate documentation - - template: azure-configs/static-websites.yml@rustinfra - parameters: - deploy_dir: target/doc - variables: - CI: 1 - - - job: AutomaticVerification - dependsOn: StyleAndDocs - pool: - vmImage: ubuntu-16.04 - steps: - - template: azure-install-rust.yml - - script: cargo test --manifest-path crates/stdarch-verify/Cargo.toml - displayName: Automatic verification - - - job: EnvOverride - dependsOn: StyleAndDocs - pool: - vmImage: ubuntu-16.04 - steps: - - template: azure-install-rust.yml - - script: RUST_STD_DETECT_UNSTABLE=avx cargo test --features=std_detect_env_override --manifest-path crates/std_detect/Cargo.toml env_override_no_avx - displayName: std_detect env override - -# - job: GameBoyAdvance -# dependsOn: StyleAndDocs -# pool: -# vmImage: ubuntu-16.04 -# steps: -# - template: azure-install-rust.yml -# - script: rustup component add rust-src -# displayName: Add rust-src -# - script: (test -x $HOME/.cargo/bin/cargo-xbuild || cargo install cargo-xbuild) -# displayName: Add cargo-xbuild - # Obtain the devkitPro tools, using `target/` as a temp directory. This - # is required because we need to use their linker. `lld` uses the `BLX` - # instruction, which was not available in thumb state code until ARMv5. -# - script: | -# mkdir -p target -# cd target -# wget https://github.com/devkitPro/pacman/releases/download/devkitpro-pacman-1.0.1/devkitpro-pacman.deb -# sudo dpkg -i devkitpro-pacman.deb -# sudo dkp-pacman -Sy -# sudo dkp-pacman -Syu -# sudo dkp-pacman -S -v --noconfirm gba-tools devkitARM -# export PATH="$PATH:/opt/devkitpro/devkitARM/bin" -# export PATH="$PATH:/opt/devkitpro/tools/bin" -# cd .. -# # Pull the target spec up into the current directory and then build -# mv ci/gba.json gba.json -# cargo xbuild -p core_arch --target gba.json -# variables: -# NORUN: 1 -# NOSTD: 1 -# NO_DOCKER: 1
diff --git a/ci/style.sh b/ci/style.sh old mode 100644 new mode 100755