-name: CI
+#############################################################
+# WARNING: automatically generated file, DO NOT CHANGE! #
+#############################################################
-on:
- pull_request:
+# This file was automatically generated by the expand-yaml-anchors tool. The
+# source file that generated this one is:
+#
+# src/ci/github-actions/ci.yml
+#
+# Once you make changes to that file you need to run:
+#
+# ./x.py run src/tools/expand-yaml-anchors/
+#
+# The CI build will fail if the tool is not run after changes to this file.
+
+---
+name: CI
+"on":
push:
branches:
+ - auto
+ - try
+ - try-perf
- master
-
-env:
- CARGO_NET_RETRY: 10
- RUSTUP_MAX_RETRIES: 10
-
+ pull_request:
+ branches:
+ - "**"
+defaults:
+ run:
+ shell: bash
jobs:
- rustfmt:
- name: "rustfmt"
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v2
- - name: Setup Rust
- run: |
- rustup update nightly --no-self-update
- rustup default nightly
- rustup component add rustfmt
- - name: Run rustfmt
- run: cargo fmt --all -- --check
-
- clippy:
- name: "clippy on ${{ matrix.target }}"
- runs-on: ubuntu-latest
+ pr:
+ name: PR
+ env:
+ CI_JOB_NAME: "${{ matrix.name }}"
+ SCCACHE_BUCKET: rust-lang-ci-sccache2
+ TOOLSTATE_REPO: "https://github.com/rust-lang-nursery/rust-toolstate"
+ CACHE_DOMAIN: ci-caches.rust-lang.org
+ if: "github.event_name == 'pull_request'"
strategy:
- fail-fast: false
matrix:
- target:
- # We shouldn't really have any OS-specific code, so think of this as a list of architectures
- - x86_64-unknown-linux-gnu
- - i686-unknown-linux-gnu
- - i586-unknown-linux-gnu
- - aarch64-unknown-linux-gnu
- - armv7-unknown-linux-gnueabihf
- - mips-unknown-linux-gnu
- - mips64-unknown-linux-gnuabi64
- - powerpc-unknown-linux-gnu
- - powerpc64-unknown-linux-gnu
- - riscv64gc-unknown-linux-gnu
- - s390x-unknown-linux-gnu
- - sparc64-unknown-linux-gnu
- - wasm32-unknown-unknown
-
+ include:
+ - name: mingw-check
+ os: ubuntu-latest-xl
+ env: {}
+ - name: x86_64-gnu-llvm-12
+ os: ubuntu-latest-xl
+ env: {}
+ - name: x86_64-gnu-tools
+ env:
+ CI_ONLY_WHEN_SUBMODULES_CHANGED: 1
+ os: ubuntu-latest-xl
+ timeout-minutes: 600
+ runs-on: "${{ matrix.os }}"
steps:
- - uses: actions/checkout@v2
- - name: Setup Rust
- run: |
- rustup update nightly --no-self-update
- rustup default nightly
- rustup target add ${{ matrix.target }}
- rustup component add clippy
- - name: Run Clippy
- run: cargo clippy --all-targets --target ${{ matrix.target }}
-
- x86-tests:
- name: "${{ matrix.target_feature }} on ${{ matrix.target }}"
- runs-on: ${{ matrix.os }}
+ - name: disable git crlf conversion
+ run: git config --global core.autocrlf false
+ - name: checkout the source code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 2
+ - name: configure the PR in which the error message will be posted
+ run: "echo \"[CI_PR_NUMBER=$num]\""
+ env:
+ num: "${{ github.event.number }}"
+ if: "success() && !env.SKIP_JOB && github.event_name == 'pull_request'"
+ - name: add extra environment variables
+ run: src/ci/scripts/setup-environment.sh
+ env:
+ EXTRA_VARIABLES: "${{ toJson(matrix.env) }}"
+ if: success() && !env.SKIP_JOB
+ - name: decide whether to skip this job
+ run: src/ci/scripts/should-skip-this.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure the channel matches the target branch
+ run: src/ci/scripts/verify-channel.sh
+ if: success() && !env.SKIP_JOB
+ - name: configure GitHub Actions to kill the build when outdated
+ uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master
+ with:
+ github_token: "${{ secrets.github_token }}"
+ if: "success() && !env.SKIP_JOB && github.ref != 'refs/heads/try'"
+ - name: collect CPU statistics
+ run: src/ci/scripts/collect-cpu-stats.sh
+ if: success() && !env.SKIP_JOB
+ - name: show the current environment
+ run: src/ci/scripts/dump-environment.sh
+ if: success() && !env.SKIP_JOB
+ - name: install awscli
+ run: src/ci/scripts/install-awscli.sh
+ if: success() && !env.SKIP_JOB
+ - name: install sccache
+ run: src/ci/scripts/install-sccache.sh
+ if: success() && !env.SKIP_JOB
+ - name: install clang
+ run: src/ci/scripts/install-clang.sh
+ if: success() && !env.SKIP_JOB
+ - name: install WIX
+ run: src/ci/scripts/install-wix.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure the build happens on a partition with enough space
+ run: src/ci/scripts/symlink-build-dir.sh
+ if: success() && !env.SKIP_JOB
+ - name: disable git crlf conversion
+ run: src/ci/scripts/disable-git-crlf-conversion.sh
+ if: success() && !env.SKIP_JOB
+ - name: install MSYS2
+ run: src/ci/scripts/install-msys2.sh
+ if: success() && !env.SKIP_JOB
+ - name: install MinGW
+ run: src/ci/scripts/install-mingw.sh
+ if: success() && !env.SKIP_JOB
+ - name: install ninja
+ run: src/ci/scripts/install-ninja.sh
+ if: success() && !env.SKIP_JOB
+ - name: enable ipv6 on Docker
+ run: src/ci/scripts/enable-docker-ipv6.sh
+ if: success() && !env.SKIP_JOB
+ - name: disable git crlf conversion
+ run: src/ci/scripts/disable-git-crlf-conversion.sh
+ if: success() && !env.SKIP_JOB
+ - name: checkout submodules
+ run: src/ci/scripts/checkout-submodules.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure line endings are correct
+ run: src/ci/scripts/verify-line-endings.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure backported commits are in upstream branches
+ run: src/ci/scripts/verify-backported-commits.sh
+ if: success() && !env.SKIP_JOB
+ - name: run the build
+ run: src/ci/scripts/run-build-from-ci.sh
+ env:
+ AWS_ACCESS_KEY_ID: "${{ env.CACHES_AWS_ACCESS_KEY_ID }}"
+ AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}"
+ TOOLSTATE_REPO_ACCESS_TOKEN: "${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}"
+ if: success() && !env.SKIP_JOB
+ - name: upload artifacts to S3
+ run: src/ci/scripts/upload-artifacts.sh
+ env:
+ AWS_ACCESS_KEY_ID: "${{ env.ARTIFACTS_AWS_ACCESS_KEY_ID }}"
+ AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}"
+ if: "success() && !env.SKIP_JOB && (github.event_name == 'push' || env.DEPLOY == '1' || env.DEPLOY_ALT == '1')"
+ auto:
+ name: auto
+ env:
+ CI_JOB_NAME: "${{ matrix.name }}"
+ SCCACHE_BUCKET: rust-lang-ci-sccache2
+ DEPLOY_BUCKET: rust-lang-ci2
+ TOOLSTATE_REPO: "https://github.com/rust-lang-nursery/rust-toolstate"
+ TOOLSTATE_ISSUES_API_URL: "https://api.github.com/repos/rust-lang/rust/issues"
+ TOOLSTATE_PUBLISH: 1
+ CACHES_AWS_ACCESS_KEY_ID: AKIA46X5W6CZI5DHEBFL
+ ARTIFACTS_AWS_ACCESS_KEY_ID: AKIA46X5W6CZN24CBO55
+ CACHE_DOMAIN: ci-caches.rust-lang.org
+ if: "github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'"
strategy:
- fail-fast: false
matrix:
- target: [x86_64-pc-windows-msvc, i686-pc-windows-msvc, i586-pc-windows-msvc, x86_64-unknown-linux-gnu, x86_64-apple-darwin]
- # `default` means we use the default target config for the target,
- # `native` means we run with `-Ctarget-cpu=native`, and anything else is
- # an arg to `-Ctarget-feature`
- target_feature: [default, native, +sse3, +ssse3, +sse4.1, +sse4.2, +avx, +avx2]
-
- exclude:
- # The macos runners seem to only reliably support up to `avx`.
- - { target: x86_64-apple-darwin, target_feature: +avx2 }
- # These features are statically known to be present for all 64 bit
- # macs, and thus are covered by the `default` test
- - { target: x86_64-apple-darwin, target_feature: +sse3 }
- - { target: x86_64-apple-darwin, target_feature: +ssse3 }
- # -Ctarget-cpu=native sounds like bad-news if target != host
- - { target: i686-pc-windows-msvc, target_feature: native }
- - { target: i586-pc-windows-msvc, target_feature: native }
-
include:
- # Populate the `matrix.os` field
- - { target: x86_64-apple-darwin, os: macos-latest }
- - { target: x86_64-unknown-linux-gnu, os: ubuntu-latest }
- - { target: x86_64-pc-windows-msvc, os: windows-latest }
- - { target: i686-pc-windows-msvc, os: windows-latest }
- - { target: i586-pc-windows-msvc, os: windows-latest }
-
- # These are globally available on all the other targets.
- - { target: i586-pc-windows-msvc, target_feature: +sse, os: windows-latest }
- - { target: i586-pc-windows-msvc, target_feature: +sse2, os: windows-latest }
-
- # Annoyingly, the x86_64-unknown-linux-gnu runner *almost* always has
- # avx512vl, but occasionally doesn't. Maybe one day we can enable it.
-
+ - name: aarch64-gnu
+ os:
+ - self-hosted
+ - ARM64
+ - linux
+ - name: arm-android
+ os: ubuntu-latest-xl
+ env: {}
+ - name: armhf-gnu
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-aarch64-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-android
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-arm-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-armhf-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-armv7-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-i586-gnu-i586-i686-musl
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-i686-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-mips-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-mips64-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-mips64el-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-mipsel-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-powerpc-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-powerpc64-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-powerpc64le-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-riscv64-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-s390x-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-various-1
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-various-2
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-x86_64-freebsd
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-x86_64-illumos
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-x86_64-linux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-x86_64-linux-alt
+ env:
+ IMAGE: dist-x86_64-linux
+ os: ubuntu-latest-xl
+ - name: dist-x86_64-musl
+ os: ubuntu-latest-xl
+ env: {}
+ - name: dist-x86_64-netbsd
+ os: ubuntu-latest-xl
+ env: {}
+ - name: i686-gnu
+ os: ubuntu-latest-xl
+ env: {}
+ - name: i686-gnu-nopt
+ os: ubuntu-latest-xl
+ env: {}
+ - name: mingw-check
+ os: ubuntu-latest-xl
+ env: {}
+ - name: test-various
+ os: ubuntu-latest-xl
+ env: {}
+ - name: wasm32
+ os: ubuntu-latest-xl
+ env: {}
+ - name: x86_64-gnu
+ os: ubuntu-latest-xl
+ env: {}
+ - name: x86_64-gnu-stable
+ env:
+ IMAGE: x86_64-gnu
+ RUST_CI_OVERRIDE_RELEASE_CHANNEL: stable
+ CI_ONLY_WHEN_CHANNEL: nightly
+ os: ubuntu-latest-xl
+ - name: x86_64-gnu-aux
+ os: ubuntu-latest-xl
+ env: {}
+ - name: x86_64-gnu-debug
+ os: ubuntu-latest-xl
+ env: {}
+ - name: x86_64-gnu-distcheck
+ os: ubuntu-latest-xl
+ env: {}
+ - name: x86_64-gnu-llvm-12
+ env:
+ RUST_BACKTRACE: 1
+ os: ubuntu-latest-xl
+ - name: x86_64-gnu-nopt
+ os: ubuntu-latest-xl
+ env: {}
+ - name: x86_64-gnu-tools
+ env:
+ DEPLOY_TOOLSTATES_JSON: toolstates-linux.json
+ os: ubuntu-latest-xl
+ - name: dist-x86_64-apple
+ env:
+ SCRIPT: "./x.py dist --exclude rust-docs --exclude extended && ./x.py dist --target=x86_64-apple-darwin rust-docs && ./x.py dist extended"
+ RUST_CONFIGURE_ARGS: "--host=x86_64-apple-darwin --target=x86_64-apple-darwin,aarch64-apple-ios,x86_64-apple-ios,aarch64-apple-ios-sim --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc --set llvm.ninja=false"
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ MACOSX_DEPLOYMENT_TARGET: 10.7
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ DIST_REQUIRE_ALL_TOOLS: 1
+ os: macos-latest
+ - name: dist-x86_64-apple-alt
+ env:
+ SCRIPT: "./x.py dist"
+ RUST_CONFIGURE_ARGS: "--enable-extended --enable-profiler --set rust.jemalloc --set llvm.ninja=false"
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ MACOSX_DEPLOYMENT_TARGET: 10.7
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ os: macos-latest
+ - name: x86_64-apple
+ env:
+ SCRIPT: "./x.py --stage 2 test"
+ RUST_CONFIGURE_ARGS: "--build=x86_64-apple-darwin --enable-sanitizers --enable-profiler --set rust.jemalloc --set llvm.ninja=false"
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ MACOSX_DEPLOYMENT_TARGET: 10.8
+ MACOSX_STD_DEPLOYMENT_TARGET: 10.7
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ os: macos-latest
+ - name: dist-aarch64-apple
+ env:
+ SCRIPT: "./x.py dist --stage 2"
+ RUST_CONFIGURE_ARGS: "--build=x86_64-apple-darwin --host=aarch64-apple-darwin --target=aarch64-apple-darwin --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc --set llvm.ninja=false"
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ USE_XCODE_CLANG: 1
+ MACOSX_DEPLOYMENT_TARGET: 11.0
+ MACOSX_STD_DEPLOYMENT_TARGET: 11.0
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ DIST_REQUIRE_ALL_TOOLS: 1
+ JEMALLOC_SYS_WITH_LG_PAGE: 14
+ os: macos-latest
+ - name: x86_64-msvc-1
+ env:
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-msvc --enable-profiler"
+ SCRIPT: make ci-subset-1
+ os: windows-latest-xl
+ - name: x86_64-msvc-2
+ env:
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-msvc --enable-profiler"
+ SCRIPT: make ci-subset-2
+ os: windows-latest-xl
+ - name: i686-msvc-1
+ env:
+ RUST_CONFIGURE_ARGS: "--build=i686-pc-windows-msvc"
+ SCRIPT: make ci-subset-1
+ os: windows-latest-xl
+ - name: i686-msvc-2
+ env:
+ RUST_CONFIGURE_ARGS: "--build=i686-pc-windows-msvc"
+ SCRIPT: make ci-subset-2
+ os: windows-latest-xl
+ - name: x86_64-msvc-cargo
+ env:
+ SCRIPT: python x.py --stage 2 test src/tools/cargotest src/tools/cargo
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-msvc --enable-lld"
+ VCVARS_BAT: vcvars64.bat
+ os: windows-latest-xl
+ - name: x86_64-msvc-tools
+ env:
+ SCRIPT: src/ci/docker/host-x86_64/x86_64-gnu-tools/checktools.sh x.py /tmp/toolstate/toolstates.json windows
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-msvc --save-toolstates=/tmp/toolstate/toolstates.json"
+ DEPLOY_TOOLSTATES_JSON: toolstates-windows.json
+ os: windows-latest-xl
+ - name: i686-mingw-1
+ env:
+ RUST_CONFIGURE_ARGS: "--build=i686-pc-windows-gnu"
+ SCRIPT: make ci-mingw-subset-1
+ CUSTOM_MINGW: 1
+ os: windows-latest-xl
+ - name: i686-mingw-2
+ env:
+ RUST_CONFIGURE_ARGS: "--build=i686-pc-windows-gnu"
+ SCRIPT: make ci-mingw-subset-2
+ CUSTOM_MINGW: 1
+ os: windows-latest-xl
+ - name: x86_64-mingw-1
+ env:
+ SCRIPT: make ci-mingw-subset-1
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-gnu --enable-profiler"
+ CUSTOM_MINGW: 1
+ os: windows-latest-xl
+ - name: x86_64-mingw-2
+ env:
+ SCRIPT: make ci-mingw-subset-2
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-gnu --enable-profiler"
+ CUSTOM_MINGW: 1
+ os: windows-latest-xl
+ - name: dist-x86_64-msvc
+ env:
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-msvc --host=x86_64-pc-windows-msvc --target=x86_64-pc-windows-msvc --enable-full-tools --enable-profiler"
+ SCRIPT: python x.py dist
+ DIST_REQUIRE_ALL_TOOLS: 1
+ os: windows-latest-xl
+ - name: dist-i686-msvc
+ env:
+ RUST_CONFIGURE_ARGS: "--build=i686-pc-windows-msvc --host=i686-pc-windows-msvc --target=i686-pc-windows-msvc,i586-pc-windows-msvc --enable-full-tools --enable-profiler"
+ SCRIPT: python x.py dist
+ DIST_REQUIRE_ALL_TOOLS: 1
+ os: windows-latest-xl
+ - name: dist-aarch64-msvc
+ env:
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-msvc --host=aarch64-pc-windows-msvc --enable-full-tools --enable-profiler"
+ SCRIPT: python x.py dist
+ DIST_REQUIRE_ALL_TOOLS: 0
+ WINDOWS_SDK_20348_HACK: 1
+ os: windows-latest-xl
+ - name: dist-i686-mingw
+ env:
+ RUST_CONFIGURE_ARGS: "--build=i686-pc-windows-gnu --enable-full-tools --enable-profiler"
+ SCRIPT: python x.py dist
+ CUSTOM_MINGW: 1
+ DIST_REQUIRE_ALL_TOOLS: 1
+ os: windows-latest-xl
+ - name: dist-x86_64-mingw
+ env:
+ SCRIPT: python x.py dist
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-gnu --enable-full-tools --enable-profiler"
+ CUSTOM_MINGW: 1
+ DIST_REQUIRE_ALL_TOOLS: 1
+ os: windows-latest-xl
+ - name: dist-x86_64-msvc-alt
+ env:
+ RUST_CONFIGURE_ARGS: "--build=x86_64-pc-windows-msvc --enable-extended --enable-profiler"
+ SCRIPT: python x.py dist
+ os: windows-latest-xl
+ timeout-minutes: 600
+ runs-on: "${{ matrix.os }}"
steps:
- - uses: actions/checkout@v2
- - name: Setup Rust
- run: |
- rustup update nightly --no-self-update
- rustup default nightly
- rustup target add ${{ matrix.target }}
-
- - name: Configure RUSTFLAGS
- shell: bash
- run: |
- case "${{ matrix.target_feature }}" in
- default)
- ;;
- native)
- echo "RUSTFLAGS=-Ctarget-cpu=native" >> $GITHUB_ENV
- ;;
- *)
- echo "RUSTFLAGS=-Ctarget-feature=${{ matrix.target_feature }}" >> $GITHUB_ENV
- ;;
- esac
-
- # Super useful for debugging why a SIGILL occurred.
- - name: Dump target configuration and support
- run: |
- rustc -Vv
-
- echo "Caveat: not all target features are expected to be logged"
-
- echo "## Requested target configuration (RUSTFLAGS=$RUSTFLAGS)"
- rustc --print=cfg --target=${{ matrix.target }} $RUSTFLAGS
-
- echo "## Supported target configuration for --target=${{ matrix.target }}"
- rustc --print=cfg --target=${{ matrix.target }} -Ctarget-cpu=native
-
- echo "## Natively supported target configuration"
- rustc --print=cfg -Ctarget-cpu=native
-
- - name: Test (debug)
- run: cargo test --verbose --target=${{ matrix.target }}
-
- - name: Test (release)
- run: cargo test --verbose --target=${{ matrix.target }} --release
-
- wasm-tests:
- name: "wasm (firefox, ${{ matrix.name }})"
- runs-on: ubuntu-latest
+ - name: disable git crlf conversion
+ run: git config --global core.autocrlf false
+ - name: checkout the source code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 2
+ - name: configure the PR in which the error message will be posted
+ run: "echo \"[CI_PR_NUMBER=$num]\""
+ env:
+ num: "${{ github.event.number }}"
+ if: "success() && !env.SKIP_JOB && github.event_name == 'pull_request'"
+ - name: add extra environment variables
+ run: src/ci/scripts/setup-environment.sh
+ env:
+ EXTRA_VARIABLES: "${{ toJson(matrix.env) }}"
+ if: success() && !env.SKIP_JOB
+ - name: decide whether to skip this job
+ run: src/ci/scripts/should-skip-this.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure the channel matches the target branch
+ run: src/ci/scripts/verify-channel.sh
+ if: success() && !env.SKIP_JOB
+ - name: configure GitHub Actions to kill the build when outdated
+ uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master
+ with:
+ github_token: "${{ secrets.github_token }}"
+ if: "success() && !env.SKIP_JOB && github.ref != 'refs/heads/try'"
+ - name: collect CPU statistics
+ run: src/ci/scripts/collect-cpu-stats.sh
+ if: success() && !env.SKIP_JOB
+ - name: show the current environment
+ run: src/ci/scripts/dump-environment.sh
+ if: success() && !env.SKIP_JOB
+ - name: install awscli
+ run: src/ci/scripts/install-awscli.sh
+ if: success() && !env.SKIP_JOB
+ - name: install sccache
+ run: src/ci/scripts/install-sccache.sh
+ if: success() && !env.SKIP_JOB
+ - name: install clang
+ run: src/ci/scripts/install-clang.sh
+ if: success() && !env.SKIP_JOB
+ - name: install WIX
+ run: src/ci/scripts/install-wix.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure the build happens on a partition with enough space
+ run: src/ci/scripts/symlink-build-dir.sh
+ if: success() && !env.SKIP_JOB
+ - name: disable git crlf conversion
+ run: src/ci/scripts/disable-git-crlf-conversion.sh
+ if: success() && !env.SKIP_JOB
+ - name: install MSYS2
+ run: src/ci/scripts/install-msys2.sh
+ if: success() && !env.SKIP_JOB
+ - name: install MinGW
+ run: src/ci/scripts/install-mingw.sh
+ if: success() && !env.SKIP_JOB
+ - name: install ninja
+ run: src/ci/scripts/install-ninja.sh
+ if: success() && !env.SKIP_JOB
+ - name: enable ipv6 on Docker
+ run: src/ci/scripts/enable-docker-ipv6.sh
+ if: success() && !env.SKIP_JOB
+ - name: disable git crlf conversion
+ run: src/ci/scripts/disable-git-crlf-conversion.sh
+ if: success() && !env.SKIP_JOB
+ - name: checkout submodules
+ run: src/ci/scripts/checkout-submodules.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure line endings are correct
+ run: src/ci/scripts/verify-line-endings.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure backported commits are in upstream branches
+ run: src/ci/scripts/verify-backported-commits.sh
+ if: success() && !env.SKIP_JOB
+ - name: run the build
+ run: src/ci/scripts/run-build-from-ci.sh
+ env:
+ AWS_ACCESS_KEY_ID: "${{ env.CACHES_AWS_ACCESS_KEY_ID }}"
+ AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}"
+ TOOLSTATE_REPO_ACCESS_TOKEN: "${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}"
+ if: success() && !env.SKIP_JOB
+ - name: upload artifacts to S3
+ run: src/ci/scripts/upload-artifacts.sh
+ env:
+ AWS_ACCESS_KEY_ID: "${{ env.ARTIFACTS_AWS_ACCESS_KEY_ID }}"
+ AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}"
+ if: "success() && !env.SKIP_JOB && (github.event_name == 'push' || env.DEPLOY == '1' || env.DEPLOY_ALT == '1')"
+ try:
+ name: try
+ env:
+ CI_JOB_NAME: "${{ matrix.name }}"
+ SCCACHE_BUCKET: rust-lang-ci-sccache2
+ DEPLOY_BUCKET: rust-lang-ci2
+ TOOLSTATE_REPO: "https://github.com/rust-lang-nursery/rust-toolstate"
+ TOOLSTATE_ISSUES_API_URL: "https://api.github.com/repos/rust-lang/rust/issues"
+ TOOLSTATE_PUBLISH: 1
+ CACHES_AWS_ACCESS_KEY_ID: AKIA46X5W6CZI5DHEBFL
+ ARTIFACTS_AWS_ACCESS_KEY_ID: AKIA46X5W6CZN24CBO55
+ CACHE_DOMAIN: ci-caches.rust-lang.org
+ if: "github.event_name == 'push' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust'"
strategy:
matrix:
include:
- - { name: default, RUSTFLAGS: "" }
- - { name: simd128, RUSTFLAGS: "-C target-feature=+simd128" }
+ - name: dist-x86_64-linux
+ os: ubuntu-latest-xl
+ env: {}
+ timeout-minutes: 600
+ runs-on: "${{ matrix.os }}"
steps:
- - uses: actions/checkout@v2
- - name: Setup Rust
- run: |
- rustup update nightly --no-self-update
- rustup default nightly
- - name: Install wasm-pack
- run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- - name: Test (debug)
- run: wasm-pack test --firefox --headless crates/core_simd
+ - name: disable git crlf conversion
+ run: git config --global core.autocrlf false
+ - name: checkout the source code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 2
+ - name: configure the PR in which the error message will be posted
+ run: "echo \"[CI_PR_NUMBER=$num]\""
env:
- RUSTFLAGS: ${{ matrix.rustflags }}
- - name: Test (release)
- run: wasm-pack test --firefox --headless crates/core_simd --release
+ num: "${{ github.event.number }}"
+ if: "success() && !env.SKIP_JOB && github.event_name == 'pull_request'"
+ - name: add extra environment variables
+ run: src/ci/scripts/setup-environment.sh
env:
- RUSTFLAGS: ${{ matrix.rustflags }}
-
- cross-tests:
- name: "${{ matrix.target }} (via cross)"
+ EXTRA_VARIABLES: "${{ toJson(matrix.env) }}"
+ if: success() && !env.SKIP_JOB
+ - name: decide whether to skip this job
+ run: src/ci/scripts/should-skip-this.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure the channel matches the target branch
+ run: src/ci/scripts/verify-channel.sh
+ if: success() && !env.SKIP_JOB
+ - name: configure GitHub Actions to kill the build when outdated
+ uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master
+ with:
+ github_token: "${{ secrets.github_token }}"
+ if: "success() && !env.SKIP_JOB && github.ref != 'refs/heads/try'"
+ - name: collect CPU statistics
+ run: src/ci/scripts/collect-cpu-stats.sh
+ if: success() && !env.SKIP_JOB
+ - name: show the current environment
+ run: src/ci/scripts/dump-environment.sh
+ if: success() && !env.SKIP_JOB
+ - name: install awscli
+ run: src/ci/scripts/install-awscli.sh
+ if: success() && !env.SKIP_JOB
+ - name: install sccache
+ run: src/ci/scripts/install-sccache.sh
+ if: success() && !env.SKIP_JOB
+ - name: install clang
+ run: src/ci/scripts/install-clang.sh
+ if: success() && !env.SKIP_JOB
+ - name: install WIX
+ run: src/ci/scripts/install-wix.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure the build happens on a partition with enough space
+ run: src/ci/scripts/symlink-build-dir.sh
+ if: success() && !env.SKIP_JOB
+ - name: disable git crlf conversion
+ run: src/ci/scripts/disable-git-crlf-conversion.sh
+ if: success() && !env.SKIP_JOB
+ - name: install MSYS2
+ run: src/ci/scripts/install-msys2.sh
+ if: success() && !env.SKIP_JOB
+ - name: install MinGW
+ run: src/ci/scripts/install-mingw.sh
+ if: success() && !env.SKIP_JOB
+ - name: install ninja
+ run: src/ci/scripts/install-ninja.sh
+ if: success() && !env.SKIP_JOB
+ - name: enable ipv6 on Docker
+ run: src/ci/scripts/enable-docker-ipv6.sh
+ if: success() && !env.SKIP_JOB
+ - name: disable git crlf conversion
+ run: src/ci/scripts/disable-git-crlf-conversion.sh
+ if: success() && !env.SKIP_JOB
+ - name: checkout submodules
+ run: src/ci/scripts/checkout-submodules.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure line endings are correct
+ run: src/ci/scripts/verify-line-endings.sh
+ if: success() && !env.SKIP_JOB
+ - name: ensure backported commits are in upstream branches
+ run: src/ci/scripts/verify-backported-commits.sh
+ if: success() && !env.SKIP_JOB
+ - name: run the build
+ run: src/ci/scripts/run-build-from-ci.sh
+ env:
+ AWS_ACCESS_KEY_ID: "${{ env.CACHES_AWS_ACCESS_KEY_ID }}"
+ AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}"
+ TOOLSTATE_REPO_ACCESS_TOKEN: "${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}"
+ if: success() && !env.SKIP_JOB
+ - name: upload artifacts to S3
+ run: src/ci/scripts/upload-artifacts.sh
+ env:
+ AWS_ACCESS_KEY_ID: "${{ env.ARTIFACTS_AWS_ACCESS_KEY_ID }}"
+ AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}"
+ if: "success() && !env.SKIP_JOB && (github.event_name == 'push' || env.DEPLOY == '1' || env.DEPLOY_ALT == '1')"
+ master:
+ name: master
runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- # TODO: Sadly, we cant configure target-feature in a meaningful way
- # because `cross` doesn't tell qemu to enable any non-default cpu
- # features, nor does it give us a way to do so.
- #
- # Ultimately, we'd like to do something like [rust-lang/stdarch][stdarch].
- # This is a lot more complex... but in practice it's likely that we can just
- # snarf the docker config from around [here][1000-dockerfiles].
- #
- # [stdarch]: https://github.com/rust-lang/stdarch/blob/a5db4eaf/.github/workflows/main.yml#L67
- # [1000-dockerfiles]: https://github.com/rust-lang/stdarch/tree/a5db4eaf/ci/docker
-
- matrix:
- target:
- - i586-unknown-linux-gnu
- # 32-bit arm has a few idiosyncracies like having subnormal flushing
- # to zero on by default. Ideally we'd set
- - armv7-unknown-linux-gnueabihf
- - aarch64-unknown-linux-gnu
- # Note: The issue above means neither of these mips targets will use
- # MSA (mips simd) but MIPS uses a nonstandard binary representation
- # for NaNs which makes it worth testing on despite that.
- - mips-unknown-linux-gnu
- - mips64-unknown-linux-gnuabi64
- - riscv64gc-unknown-linux-gnu
- # TODO this test works, but it appears to time out
- # - powerpc-unknown-linux-gnu
- # TODO this test is broken, but it appears to be a problem with QEMU, not us.
- # - powerpc64le-unknown-linux-gnu
- # TODO enable this once a new version of cross is released
- # - powerpc64-unknown-linux-gnu
-
+ env:
+ SCCACHE_BUCKET: rust-lang-ci-sccache2
+ DEPLOY_BUCKET: rust-lang-ci2
+ TOOLSTATE_REPO: "https://github.com/rust-lang-nursery/rust-toolstate"
+ TOOLSTATE_ISSUES_API_URL: "https://api.github.com/repos/rust-lang/rust/issues"
+ TOOLSTATE_PUBLISH: 1
+ CACHES_AWS_ACCESS_KEY_ID: AKIA46X5W6CZI5DHEBFL
+ ARTIFACTS_AWS_ACCESS_KEY_ID: AKIA46X5W6CZN24CBO55
+ CACHE_DOMAIN: ci-caches.rust-lang.org
+ if: "github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'rust-lang-ci/rust'"
steps:
- - uses: actions/checkout@v2
- - name: Setup Rust
- run: |
- rustup update nightly --no-self-update
- rustup default nightly
- rustup target add ${{ matrix.target }}
- rustup component add rust-src
-
- - name: Install Cross
- # Equivalent to `cargo install cross`, but downloading a prebuilt
- # binary. Ideally we wouldn't hardcode a version, but the version number
- # being part of the tarball means we can't just use the download/latest
- # URL :(
- run: |
- CROSS_URL=https://github.com/rust-embedded/cross/releases/download/v0.2.1/cross-v0.2.1-x86_64-unknown-linux-gnu.tar.gz
- mkdir -p "$HOME/.bin"
- curl -sfSL --retry-delay 10 --retry 5 "${CROSS_URL}" | tar zxf - -C "$HOME/.bin"
- echo "$HOME/.bin" >> $GITHUB_PATH
-
- - name: Test (debug)
- run: cross test --verbose --target=${{ matrix.target }}
-
- - name: Test (release)
- run: cross test --verbose --target=${{ matrix.target }} --release
-
- features:
- name: "Check cargo features (${{ matrix.features }} ${{ matrix.rustflags }})"
+ - name: checkout the source code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 2
+ - name: publish toolstate
+ run: src/ci/publish_toolstate.sh
+ shell: bash
+ env:
+ TOOLSTATE_REPO_ACCESS_TOKEN: "${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}"
+ if: success() && !env.SKIP_JOB
+ try-success:
+ needs:
+ - try
+ if: "success() && github.event_name == 'push' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust'"
+ steps:
+ - name: mark the job as a success
+ run: exit 0
+ shell: bash
+ name: bors build finished
runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- rustflags:
- - ""
- - "-Ctarget-feature=+avx512f" # AVX-512 uses packed bit masks, so enable it to test more code paths
- features:
- - ""
- - "--features std"
- - "--features generic_const_exprs"
- - "--features std --features generic_const_exprs"
-
+ try-failure:
+ needs:
+ - try
+ if: "!success() && github.event_name == 'push' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust'"
steps:
- - uses: actions/checkout@v2
- - name: Setup Rust
- run: |
- rustup update nightly --no-self-update
- rustup default nightly
- - name: Check build
- run: cargo check --all-targets --no-default-features ${{ matrix.features }}
- env:
- RUSTFLAGS: ${{ matrix.rustflags }}
+ - name: mark the job as a failure
+ run: exit 1
+ shell: bash
+ name: bors build finished
+ runs-on: ubuntu-latest
+ auto-success:
+ needs:
+ - auto
+ if: "success() && github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'"
+ steps:
+ - name: mark the job as a success
+ run: exit 0
+ shell: bash
+ name: bors build finished
+ runs-on: ubuntu-latest
+ auto-failure:
+ needs:
+ - auto
+ if: "!success() && github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'"
+ steps:
+ - name: mark the job as a failure
+ run: exit 1
+ shell: bash
+ name: bors build finished
+ runs-on: ubuntu-latest