diff --git a/.github/workflows/all-features.yaml b/.github/workflows/all-features.yaml new file mode 100644 index 0000000..f3ea972 --- /dev/null +++ b/.github/workflows/all-features.yaml @@ -0,0 +1,47 @@ +name: AllFeatures (PR) + +# This is an additional workflow to test building with all feature combinations. +# Unlike our main workflows, this doesn't self-test the rustup install scripts, +# nor run on the rust docker images. This permits a smaller workflow without the +# templating and so on. + +on: + pull_request: + branches: + - "*" + - renovate/* + +jobs: + build: + name: Build + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # Might add more targets in future. + target: + - x86_64-unknown-linux-gnu + steps: + - name: Clone repo + uses: actions/checkout@v3 + - name: Install rustup stable + run: rustup toolchain install stable --profile minimal + - name: Install Protoc + uses: arduino/setup-protoc@v1 + with: + version: "3.x" + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Set environment variables appropriately for the build + run: | + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV + - name: Cache Cargo + uses: Swatinem/rust-cache@v2 + - name: Install cargo-all-features + run: cargo install cargo-all-features --git https://github.com/rbtcollins/cargo-all-features.git + - name: Ensure we have our goal target installed + run: | + rustup target install "$TARGET" + - name: Build every combination + run: | + cargo check-all-features --root-only diff --git a/.github/workflows/centos-fmt-clippy-on-all.yaml b/.github/workflows/centos-fmt-clippy-on-all.yaml new file mode 100644 index 0000000..23baf85 --- /dev/null +++ b/.github/workflows/centos-fmt-clippy-on-all.yaml @@ -0,0 +1,97 @@ +# This is ci/actions-templates/centos-fmt-clippy.yaml +# Do not edit this file in .github/workflows + +name: General Checks + +on: + pull_request: + branches: + - "*" + push: + branches: + - master + - stable + - renovate/* + schedule: + - cron: "30 0 * * 1" # Every Monday at half past midnight + +jobs: + check: + name: Checks + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - name: Clone repo + uses: actions/checkout@v3 + with: + # v2 defaults to a shallow checkout, but we need at least to the previous tag + fetch-depth: 0 + - name: Acquire tags for the repo + run: | + git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/* + - name: Display the current git status + run: | + git status + git describe + - name: Prep cargo dirs + run: | + mkdir -p ~/.cargo/{registry,git} + - name: Set environment variables appropriately for the build + run: | + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + - name: Cache cargo registry and git trees + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Get rustc commit hash + id: cargo-target-cache + run: | + echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT + shell: bash + - name: Cache cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ runner.os }}-cargo-clippy-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ github.base_ref }}-${{ runner.os }}-cargo-clippy-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rustup using ./rustup-init.sh + run: | + sh ./rustup-init.sh --default-toolchain=none --profile=minimal -y + - name: Ensure Beta is up to date + run: | + if rustc +beta -vV >/dev/null 2>/dev/null; then + rustup toolchain uninstall beta + fi + rustup toolchain install --profile=minimal beta + rustup default beta + - name: Ensure we have the components we need + run: | + rustup component add rustfmt + rustup component add clippy + - name: Run the centos check within the docker image + run: | + docker run \ + --volume "$PWD":/checkout:ro \ + --workdir /checkout \ + --tty \ + --init \ + --rm \ + centos:7 \ + sh ./ci/raw_init.sh + - name: Run shell checks + run: | + shellcheck -x -s dash -- rustup-init.sh + git ls-files -- '*.sh' | xargs shellcheck -x -s dash + git ls-files -- '*.bash' | xargs shellcheck -x -s bash + - name: Run formatting checks + run: | + cargo fmt --all --check + - name: Run cargo check and clippy + run: | + cargo check --all --all-targets --features test + git ls-files -- '*.rs' | xargs touch + cargo clippy --all --all-targets --features test diff --git a/.github/workflows/deploy-docs.yaml b/.github/workflows/deploy-docs.yaml new file mode 100644 index 0000000..5691076 --- /dev/null +++ b/.github/workflows/deploy-docs.yaml @@ -0,0 +1,55 @@ +name: Deploy Docs + +on: + push: + branches: + - stable + - master + +# Builds all docs for both stable and master branches. +# In the gh-pages branch, we place: +# stable user-guide at / +# master user-guide at /devel +# master dev-guide at /dev-guide + +jobs: + doc: + name: Documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Install mdbook + run: | + mkdir mdbook + curl -Lf https://github.com/rust-lang/mdBook/releases/download/v0.4.6/mdbook-v0.4.6-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook + echo "`pwd`/mdbook" >> $GITHUB_PATH + - name: Build book + run: | + # Build for stable + git checkout stable + # Support both old and new directory structure during the transition + cd doc/user-guide || cd doc + mdbook build + mv book ${{ runner.temp }} + # Build for master + cd $(git rev-parse --show-toplevel) + git checkout master + cd doc/user-guide + mdbook build + mv book ${{ runner.temp }}/book/devel + # Build dev-guide for master + cd ../dev-guide + mdbook build + mv book ${{ runner.temp }}/book/dev-guide + - name: Deploy to GitHub + run: | + cd ${{ runner.temp }}/book + git init + git config user.name "Deploy from CI" + git config user.email "" + git add . .nojekyll + git commit -m "Deploy $GITHUB_REF $GITHUB_SHA to gh-pages" + git remote add origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY + git push --force --set-upstream origin master:gh-pages diff --git a/.github/workflows/linux-builds-on-master.yaml b/.github/workflows/linux-builds-on-master.yaml new file mode 100644 index 0000000..c037f90 --- /dev/null +++ b/.github/workflows/linux-builds-on-master.yaml @@ -0,0 +1,159 @@ +# This is ci/actions-templates/linux-builds-template.yaml +# Do not edit this file in .github/workflows + +name: Linux (master) # skip-pr skip-stable + +on: + push: # skip-pr + branches: # skip-pr + - master # skip-pr skip-stable + schedule: # skip-pr skip-stable + - cron: "30 0 * * 1" # Every Monday at half past midnight UTC skip-pr skip-stable + +jobs: + build: + name: Build + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + mode: + - dev + - release + target: + - x86_64-unknown-linux-gnu + - armv7-unknown-linux-gnueabihf + - aarch64-linux-android + - aarch64-unknown-linux-gnu # skip-pr + - powerpc64-unknown-linux-gnu # skip-pr + - x86_64-unknown-linux-musl # skip-pr + include: + - target: x86_64-unknown-linux-gnu + run_tests: YES + #snap_arch: amd64 + - target: aarch64-unknown-linux-gnu # skip-pr + #snap_arch: arm64 # skip-pr + - target: armv7-unknown-linux-gnueabihf + #snap_arch: armhf + steps: + - name: Clone repo + uses: actions/checkout@v3 + with: + # v2 defaults to a shallow checkout, but we need at least to the previous tag + fetch-depth: 0 + - name: Acquire tags for the repo + run: | + git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/* + - name: Display the current git status + run: | + git status + git describe + - name: Prep cargo dirs + run: | + mkdir -p ~/.cargo/{registry,git} + - name: Set environment variables appropriately for the build + run: | + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV + - name: Skip tests + if: matrix.run_tests == '' || matrix.mode == 'release' + run: | + echo "SKIP_TESTS=yes" >> $GITHUB_ENV + - name: Cache cargo registry and git trees + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Get rustc commit hash + id: cargo-target-cache + run: | + echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT + shell: bash + - name: Cache cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rustup using ./rustup-init.sh + run: | + sh ./rustup-init.sh --default-toolchain=none --profile=minimal -y + - name: Ensure Stable is up to date + run: | + if rustc +stable -vV >/dev/null 2>/dev/null; then + rustup toolchain uninstall stable + fi + rustup toolchain install --profile=minimal stable + - name: Ensure we have our goal target installed + run: | + rustup target install "$TARGET" + - name: Determine which docker we need to run in + run: | + case "$TARGET" in + *-linux-android*) DOCKER=android ;; # Android uses a local docker image + *) DOCKER="$TARGET" ;; + esac + echo "DOCKER=$DOCKER" >> $GITHUB_ENV + - name: Fetch the docker + run: bash ci/fetch-rust-docker.bash "${TARGET}" + - name: Maybe build a docker from there + run: | + if [ -f "ci/docker/$DOCKER/Dockerfile" ]; then + docker build -t "$DOCKER" -f "ci/docker/${DOCKER}/Dockerfile" . + fi + - name: Run the build within the docker image + env: + BUILD_PROFILE: ${{ matrix.mode }} + run: | + mkdir -p "${PWD}/target" + chown -R "$(id -u)":"$(id -g)" "${PWD}/target" + docker run \ + --entrypoint sh \ + --env BUILD_PROFILE="${BUILD_PROFILE}" \ + --env CARGO_HOME=/cargo \ + --env CARGO_TARGET_DIR=/checkout/target \ + --env LIBZ_SYS_STATIC=1 \ + --env SKIP_TESTS="${SKIP_TESTS}" \ + --env TARGET="${TARGET}" \ + --init \ + --rm \ + --tty \ + --user "$(id -u)":"$(id -g)" \ + --volume "$(rustc --print sysroot)":/rustc-sysroot:ro \ + --volume "${HOME}/.cargo:/cargo" \ + --volume "${PWD}":/checkout:ro \ + --volume "${PWD}"/target:/checkout/target \ + --workdir /checkout \ + "${DOCKER}" \ + -c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash' + - name: Upload the built artifact + uses: actions/upload-artifact@v3 + if: matrix.mode == 'release' + with: + name: rustup-init-${{ matrix.target }} + path: | + target/${{ matrix.target }}/release/rustup-init + retention-days: 7 + - name: Acquire the AWS tooling + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + pip3 install -U setuptools + pip3 install awscli + - name: Prepare the dist + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + bash ci/prepare-deploy.bash + - name: Deploy build to dev-static dist tree for release team + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + aws s3 cp --recursive deploy/ s3://dev-static-rust-lang-org/rustup/ + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-1 + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache diff --git a/.github/workflows/linux-builds-on-pr.yaml b/.github/workflows/linux-builds-on-pr.yaml new file mode 100644 index 0000000..d5ee9e8 --- /dev/null +++ b/.github/workflows/linux-builds-on-pr.yaml @@ -0,0 +1,153 @@ +# This is ci/actions-templates/linux-builds-template.yaml +# Do not edit this file in .github/workflows + +name: Linux (PR) # skip-master skip-stable + +on: + pull_request: # skip-master skip-stable + branches: # skip-master skip-stable + - "*" # skip-master skip-stable + - renovate/* # skip-master skip-stable + +jobs: + build: + name: Build + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + mode: + - dev + - release + target: + - x86_64-unknown-linux-gnu + - armv7-unknown-linux-gnueabihf + - aarch64-linux-android + include: + - target: x86_64-unknown-linux-gnu + run_tests: YES + #snap_arch: amd64 + - target: armv7-unknown-linux-gnueabihf + #snap_arch: armhf + steps: + - name: Clone repo + uses: actions/checkout@v3 + with: + # v2 defaults to a shallow checkout, but we need at least to the previous tag + fetch-depth: 0 + - name: Acquire tags for the repo + run: | + git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/* + - name: Display the current git status + run: | + git status + git describe + - name: Prep cargo dirs + run: | + mkdir -p ~/.cargo/{registry,git} + - name: Set environment variables appropriately for the build + run: | + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV + - name: Skip tests + if: matrix.run_tests == '' || matrix.mode == 'release' + run: | + echo "SKIP_TESTS=yes" >> $GITHUB_ENV + - name: Cache cargo registry and git trees + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Get rustc commit hash + id: cargo-target-cache + run: | + echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT + shell: bash + - name: Cache cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rustup using ./rustup-init.sh + run: | + sh ./rustup-init.sh --default-toolchain=none --profile=minimal -y + - name: Ensure Stable is up to date + run: | + if rustc +stable -vV >/dev/null 2>/dev/null; then + rustup toolchain uninstall stable + fi + rustup toolchain install --profile=minimal stable + - name: Ensure we have our goal target installed + run: | + rustup target install "$TARGET" + - name: Determine which docker we need to run in + run: | + case "$TARGET" in + *-linux-android*) DOCKER=android ;; # Android uses a local docker image + *) DOCKER="$TARGET" ;; + esac + echo "DOCKER=$DOCKER" >> $GITHUB_ENV + - name: Fetch the docker + run: bash ci/fetch-rust-docker.bash "${TARGET}" + - name: Maybe build a docker from there + run: | + if [ -f "ci/docker/$DOCKER/Dockerfile" ]; then + docker build -t "$DOCKER" -f "ci/docker/${DOCKER}/Dockerfile" . + fi + - name: Run the build within the docker image + env: + BUILD_PROFILE: ${{ matrix.mode }} + run: | + mkdir -p "${PWD}/target" + chown -R "$(id -u)":"$(id -g)" "${PWD}/target" + docker run \ + --entrypoint sh \ + --env BUILD_PROFILE="${BUILD_PROFILE}" \ + --env CARGO_HOME=/cargo \ + --env CARGO_TARGET_DIR=/checkout/target \ + --env LIBZ_SYS_STATIC=1 \ + --env SKIP_TESTS="${SKIP_TESTS}" \ + --env TARGET="${TARGET}" \ + --init \ + --rm \ + --tty \ + --user "$(id -u)":"$(id -g)" \ + --volume "$(rustc --print sysroot)":/rustc-sysroot:ro \ + --volume "${HOME}/.cargo:/cargo" \ + --volume "${PWD}":/checkout:ro \ + --volume "${PWD}"/target:/checkout/target \ + --workdir /checkout \ + "${DOCKER}" \ + -c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash' + - name: Upload the built artifact + uses: actions/upload-artifact@v3 + if: matrix.mode == 'release' + with: + name: rustup-init-${{ matrix.target }} + path: | + target/${{ matrix.target }}/release/rustup-init + retention-days: 7 + - name: Acquire the AWS tooling + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + pip3 install -U setuptools + pip3 install awscli + - name: Prepare the dist + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + bash ci/prepare-deploy.bash + - name: Deploy build to dev-static dist tree for release team + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + aws s3 cp --recursive deploy/ s3://dev-static-rust-lang-org/rustup/ + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-1 + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache diff --git a/.github/workflows/linux-builds-on-stable.yaml b/.github/workflows/linux-builds-on-stable.yaml new file mode 100644 index 0000000..a345983 --- /dev/null +++ b/.github/workflows/linux-builds-on-stable.yaml @@ -0,0 +1,183 @@ +# This is ci/actions-templates/linux-builds-template.yaml +# Do not edit this file in .github/workflows + +name: Linux (stable) # skip-master skip-pr + +on: + push: # skip-pr + branches: # skip-pr + - stable # skip-pr skip-master + +jobs: + build: + name: Build + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + mode: + - dev + - release + target: + - x86_64-unknown-linux-gnu + - armv7-unknown-linux-gnueabihf + - aarch64-linux-android + - aarch64-unknown-linux-gnu # skip-pr + - aarch64-unknown-linux-musl # skip-pr skip-master + - powerpc64-unknown-linux-gnu # skip-pr + - x86_64-unknown-linux-musl # skip-pr + - i686-unknown-linux-gnu # skip-pr skip-master + - arm-unknown-linux-gnueabi # skip-pr skip-master + - arm-unknown-linux-gnueabihf # skip-pr skip-master + - x86_64-unknown-freebsd # skip-pr skip-master + - x86_64-unknown-netbsd # skip-pr skip-master + - x86_64-unknown-illumos # skip-pr skip-master + - powerpc-unknown-linux-gnu # skip-pr skip-master + - powerpc64le-unknown-linux-gnu # skip-pr skip-master + - mips-unknown-linux-gnu # skip-pr skip-master + - mips64-unknown-linux-gnuabi64 # skip-pr skip-master + - mipsel-unknown-linux-gnu # skip-pr skip-master + - mips64el-unknown-linux-gnuabi64 # skip-pr skip-master + - s390x-unknown-linux-gnu # skip-pr skip-master + - arm-linux-androideabi # skip-pr skip-master + - armv7-linux-androideabi # skip-pr skip-master + - i686-linux-android # skip-pr skip-master + - x86_64-linux-android # skip-pr skip-master + - riscv64gc-unknown-linux-gnu # skip-pr skip-master + - loongarch64-unknown-linux-gnu # skip-pr skip-master + include: + - target: x86_64-unknown-linux-gnu + run_tests: YES + #snap_arch: amd64 + - target: i686-unknown-linux-gnu # skip-pr skip-master + #snap_arch: i386 # skip-pr skip-master + - target: aarch64-unknown-linux-gnu # skip-pr + #snap_arch: arm64 # skip-pr + - target: armv7-unknown-linux-gnueabihf + #snap_arch: armhf + - target: powerpc64le-unknown-linux-gnu # skip-pr skip-master + #snap_arch: ppc64el # skip-pr skip-master + - target: s390x-unknown-linux-gnu # skip-pr skip-master + #snap_arch: s390x # skip-pr skip-master + steps: + - name: Clone repo + uses: actions/checkout@v3 + with: + # v2 defaults to a shallow checkout, but we need at least to the previous tag + fetch-depth: 0 + - name: Acquire tags for the repo + run: | + git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/* + - name: Display the current git status + run: | + git status + git describe + - name: Prep cargo dirs + run: | + mkdir -p ~/.cargo/{registry,git} + - name: Set environment variables appropriately for the build + run: | + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV + - name: Skip tests + if: matrix.run_tests == '' || matrix.mode == 'release' + run: | + echo "SKIP_TESTS=yes" >> $GITHUB_ENV + - name: Cache cargo registry and git trees + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Get rustc commit hash + id: cargo-target-cache + run: | + echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT + shell: bash + - name: Cache cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rustup using ./rustup-init.sh + run: | + sh ./rustup-init.sh --default-toolchain=none --profile=minimal -y + - name: Ensure Stable is up to date + run: | + if rustc +stable -vV >/dev/null 2>/dev/null; then + rustup toolchain uninstall stable + fi + rustup toolchain install --profile=minimal stable + - name: Ensure we have our goal target installed + run: | + rustup target install "$TARGET" + - name: Determine which docker we need to run in + run: | + case "$TARGET" in + *-linux-android*) DOCKER=android ;; # Android uses a local docker image + *) DOCKER="$TARGET" ;; + esac + echo "DOCKER=$DOCKER" >> $GITHUB_ENV + - name: Fetch the docker + run: bash ci/fetch-rust-docker.bash "${TARGET}" + - name: Maybe build a docker from there + run: | + if [ -f "ci/docker/$DOCKER/Dockerfile" ]; then + docker build -t "$DOCKER" -f "ci/docker/${DOCKER}/Dockerfile" . + fi + - name: Run the build within the docker image + env: + BUILD_PROFILE: ${{ matrix.mode }} + run: | + mkdir -p "${PWD}/target" + chown -R "$(id -u)":"$(id -g)" "${PWD}/target" + docker run \ + --entrypoint sh \ + --env BUILD_PROFILE="${BUILD_PROFILE}" \ + --env CARGO_HOME=/cargo \ + --env CARGO_TARGET_DIR=/checkout/target \ + --env LIBZ_SYS_STATIC=1 \ + --env SKIP_TESTS="${SKIP_TESTS}" \ + --env TARGET="${TARGET}" \ + --init \ + --rm \ + --tty \ + --user "$(id -u)":"$(id -g)" \ + --volume "$(rustc --print sysroot)":/rustc-sysroot:ro \ + --volume "${HOME}/.cargo:/cargo" \ + --volume "${PWD}":/checkout:ro \ + --volume "${PWD}"/target:/checkout/target \ + --workdir /checkout \ + "${DOCKER}" \ + -c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash' + - name: Upload the built artifact + uses: actions/upload-artifact@v3 + if: matrix.mode == 'release' + with: + name: rustup-init-${{ matrix.target }} + path: | + target/${{ matrix.target }}/release/rustup-init + retention-days: 7 + - name: Acquire the AWS tooling + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + pip3 install -U setuptools + pip3 install awscli + - name: Prepare the dist + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + bash ci/prepare-deploy.bash + - name: Deploy build to dev-static dist tree for release team + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + aws s3 cp --recursive deploy/ s3://dev-static-rust-lang-org/rustup/ + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-1 + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache diff --git a/.github/workflows/macos-builds-on-all.yaml b/.github/workflows/macos-builds-on-all.yaml new file mode 100644 index 0000000..4e5dbe6 --- /dev/null +++ b/.github/workflows/macos-builds-on-all.yaml @@ -0,0 +1,138 @@ +# This is ci/actions-templates/macos-builds-template.yaml +# Do not edit this file in .github/workflows + +name: macOS +on: + pull_request: + branches: + - "*" + push: + branches: + - master + - stable + - renovate/* + schedule: + - cron: "30 0 * * 1" # Every Monday at half past midnight UTC + +jobs: + build: + name: Build + runs-on: macos-latest + strategy: + matrix: + target: + - x86_64-apple-darwin + - aarch64-apple-darwin + mode: + - dev + - release + include: + - target: x86_64-apple-darwin + run_tests: YES + steps: + - uses: actions/checkout@v3 + with: + # v2 defaults to a shallow checkout, but we need at least to the previous tag + fetch-depth: 0 + - name: Acquire tags for the repo + run: | + git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/* + - name: Display the current git status + run: | + git status + git describe + - name: Prep cargo dirs + run: | + mkdir -p ~/.cargo/{registry,git} + - name: Set environment variables appropriately for the build + run: | + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV + echo "SKIP_TESTS=" >> $GITHUB_ENV + echo "LZMA_API_STATIC=1" >> $GITHUB_ENV + - name: Skip tests + if: matrix.run_tests == '' || matrix.mode == 'release' + run: | + echo "SKIP_TESTS=yes" >> $GITHUB_ENV + - name: Cache cargo registry and git trees + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Get rustc commit hash + id: cargo-target-cache + run: | + echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT + shell: bash + - name: Cache cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rustup using ./rustup-init.sh + run: | + sh ./rustup-init.sh --default-toolchain=none --profile=minimal -y + - name: Ensure Stable is up to date + run: | + if rustc +stable -vV >/dev/null 2>/dev/null; then + rustup toolchain uninstall stable + fi + rustup toolchain install --profile=minimal stable + - name: aarch64-specific items + run: | + # Use nightly for now + rustup toolchain install --profile=minimal nightly + rustup default nightly + if: matrix.target == 'aarch64-apple-darwin' + - name: Ensure we have our goal target installed + run: | + rustup target install "$TARGET" + - name: Run a full build and test + env: + BUILD_PROFILE: ${{ matrix.mode }} + run: bash ci/run.bash + - name: Dump dynamic link targets + if: matrix.mode == 'release' + run: | + otool -L target/${TARGET}/release/rustup-init + if otool -L target/${TARGET}/release/rustup-init | grep -q -F /usr/local/; then + echo >&2 "Unfortunately there are /usr/local things in the link. Fail." + exit 1 + fi + - name: Upload the built artifact + if: matrix.mode == 'release' + uses: actions/upload-artifact@v3 + with: + name: rustup-init-${{ matrix.target }} + path: | + target/${{ matrix.target }}/release/rustup-init + retention-days: 7 + - name: Acquire the AWS tooling + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + pip3 install awscli + - name: Prepare the dist + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + bash ci/prepare-deploy.bash + - name: Deploy build to dev-static dist tree for release team + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + aws s3 cp --recursive deploy/ s3://dev-static-rust-lang-org/rustup/ + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-1 + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache + - name: Flush cache + # This is a workaround for a bug with GitHub Actions Cache that causes + # corrupt cache entries (particularly in the target directory). See + # https://github.com/actions/cache/issues/403 and + # https://github.com/rust-lang/cargo/issues/8603. + run: sudo /usr/sbin/purge diff --git a/.github/workflows/test-docs.yaml b/.github/workflows/test-docs.yaml new file mode 100644 index 0000000..3173b8a --- /dev/null +++ b/.github/workflows/test-docs.yaml @@ -0,0 +1,31 @@ +name: Test build docs on PR + +on: + pull_request: + branches: + - "*" + +# Builds docs for both stable and master branches. +# stable is placed in the root of the gh-pages branch, while master is placed at /devel + +jobs: + doc: + name: Documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Install mdbook + run: | + mkdir mdbook + curl -Lf https://github.com/rust-lang/mdBook/releases/download/v0.4.6/mdbook-v0.4.6-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook + echo "`pwd`/mdbook" >> $GITHUB_PATH + - name: Build user-guide + run: | + cd doc/user-guide + mdbook build + - name: Build dev-guide + run: | + cd doc/dev-guide + mdbook build \ No newline at end of file diff --git a/.github/workflows/windows-builds-on-master.yaml b/.github/workflows/windows-builds-on-master.yaml new file mode 100644 index 0000000..186bfc2 --- /dev/null +++ b/.github/workflows/windows-builds-on-master.yaml @@ -0,0 +1,147 @@ +# This is ci/actions-templates/windows-builds-template.yaml +# Do not edit this file in .github/workflows + +name: Windows (master) # skip-pr skip-stable + +on: + push: # skip-pr + branches: # skip-pr + - master # skip-pr skip-stable + schedule: # skip-pr skip-stable + - cron: "30 0 * * 1" # Every Monday at half past midnight UTC skip-pr skip-stable + +jobs: + build: + name: Build + runs-on: windows-latest + env: + RUSTFLAGS: -Ctarget-feature=+crt-static + strategy: + fail-fast: false + matrix: + target: + - x86_64-pc-windows-msvc + - aarch64-pc-windows-msvc # skip-pr + - x86_64-pc-windows-gnu # skip-pr + mode: + - dev + - release + include: + - target: x86_64-pc-windows-msvc + run_tests: YES + - target: x86_64-pc-windows-gnu # skip-pr + mingw: https://ci-mirrors.rust-lang.org/rustc/x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z # skip-pr + mingwdir: mingw64 # skip-pr + steps: + - uses: actions/checkout@v3 + # v2 defaults to a shallow checkout, but we need at least to the previous tag + with: + fetch-depth: 0 + - name: Acquire tags for the repo + run: | + git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/* + - name: Display the current git status + run: | + git status + git describe + - name: Prep cargo dirs + run: | + New-Item "${env:USERPROFILE}\.cargo\registry" -ItemType Directory -Force + New-Item "${env:USERPROFILE}\.cargo\git" -ItemType Directory -Force + shell: powershell + - name: Install mingw + run: | + # We retrieve mingw from the Rust CI buckets + # Disable the download progress bar which can cause perf issues + $ProgressPreference = "SilentlyContinue" + Invoke-WebRequest ${{ matrix.mingw }} -OutFile mingw.7z + 7z x -y mingw.7z -oC:\msys64 | Out-Null + del mingw.7z + echo "C:\msys64\usr\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + echo "C:\msys64\${{ matrix.mingwdir }}\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + shell: powershell + if: matrix.mingw != '' + - name: Set PATH + run: | + echo "%USERPROFILE%\.cargo\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + echo "TARGET=${{ matrix.target }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + - name: Skip tests + if: matrix.run_tests == '' || matrix.mode == 'release' + run: | + echo "SKIP_TESTS=yes" >> $GITHUB_ENV + shell: bash + - name: Cache cargo registry and git trees + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Get rustc commit hash + id: cargo-target-cache + run: | + echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT + shell: bash + - name: Cache cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rustup using win.rustup.rs + run: | + # Disable the download progress bar which can cause perf issues + $ProgressPreference = "SilentlyContinue" + Invoke-WebRequest https://win.rustup.rs/ -OutFile rustup-init.exe + .\rustup-init.exe -y --default-host=x86_64-pc-windows-msvc --profile=minimal + del rustup-init.exe + shell: powershell + - name: Ensure stable toolchain is up to date + run: rustup update stable + shell: bash + - name: Install the target + run: | + rustup target install ${{ matrix.target }} + - name: Run a full build + env: + TARGET: ${{ matrix.target }} + BUILD_PROFILE: ${{ matrix.mode }} + run: bash ci/run.bash + - name: Run cargo check and clippy + if: matrix.mode != 'release' + env: + TARGET: ${{ matrix.target }} + # os-specific code leads to lints escaping if we only run this in one target + run: | + cargo check --all --all-targets --features test + git ls-files -- '*.rs' | xargs touch + cargo clippy --workspace --all-targets --features test + - name: Upload the built artifact + if: matrix.mode == 'release' + uses: actions/upload-artifact@v3 + with: + name: rustup-init-${{ matrix.target }} + path: | + target/${{ matrix.target }}/release/rustup-init.exe + retention-days: 7 + - name: Acquire the AWS tooling + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + choco upgrade awscli + - name: Prepare the dist + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + .\ci\prepare-deploy.ps1 + shell: powershell + - name: Deploy build to dev-static dist tree for release team + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + aws --debug s3 cp --recursive dist s3://dev-static-rust-lang-org/rustup/dist + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-1 + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache diff --git a/.github/workflows/windows-builds-on-pr.yaml b/.github/workflows/windows-builds-on-pr.yaml new file mode 100644 index 0000000..206151b --- /dev/null +++ b/.github/workflows/windows-builds-on-pr.yaml @@ -0,0 +1,141 @@ +# This is ci/actions-templates/windows-builds-template.yaml +# Do not edit this file in .github/workflows + +name: Windows (PR) # skip-master skip-stable + +on: + pull_request: # skip-master skip-stable + branches: # skip-master skip-stable + - "*" # skip-master skip-stable + - renovate/* # skip-master skip-stable + +jobs: + build: + name: Build + runs-on: windows-latest + env: + RUSTFLAGS: -Ctarget-feature=+crt-static + strategy: + fail-fast: false + matrix: + target: + - x86_64-pc-windows-msvc + mode: + - dev + - release + include: + - target: x86_64-pc-windows-msvc + run_tests: YES + steps: + - uses: actions/checkout@v3 + # v2 defaults to a shallow checkout, but we need at least to the previous tag + with: + fetch-depth: 0 + - name: Acquire tags for the repo + run: | + git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/* + - name: Display the current git status + run: | + git status + git describe + - name: Prep cargo dirs + run: | + New-Item "${env:USERPROFILE}\.cargo\registry" -ItemType Directory -Force + New-Item "${env:USERPROFILE}\.cargo\git" -ItemType Directory -Force + shell: powershell + - name: Install mingw + run: | + # We retrieve mingw from the Rust CI buckets + # Disable the download progress bar which can cause perf issues + $ProgressPreference = "SilentlyContinue" + Invoke-WebRequest ${{ matrix.mingw }} -OutFile mingw.7z + 7z x -y mingw.7z -oC:\msys64 | Out-Null + del mingw.7z + echo "C:\msys64\usr\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + echo "C:\msys64\${{ matrix.mingwdir }}\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + shell: powershell + if: matrix.mingw != '' + - name: Set PATH + run: | + echo "%USERPROFILE%\.cargo\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + echo "TARGET=${{ matrix.target }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + - name: Skip tests + if: matrix.run_tests == '' || matrix.mode == 'release' + run: | + echo "SKIP_TESTS=yes" >> $GITHUB_ENV + shell: bash + - name: Cache cargo registry and git trees + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Get rustc commit hash + id: cargo-target-cache + run: | + echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT + shell: bash + - name: Cache cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rustup using win.rustup.rs + run: | + # Disable the download progress bar which can cause perf issues + $ProgressPreference = "SilentlyContinue" + Invoke-WebRequest https://win.rustup.rs/ -OutFile rustup-init.exe + .\rustup-init.exe -y --default-host=x86_64-pc-windows-msvc --profile=minimal + del rustup-init.exe + shell: powershell + - name: Ensure stable toolchain is up to date + run: rustup update stable + shell: bash + - name: Install the target + run: | + rustup target install ${{ matrix.target }} + - name: Run a full build + env: + TARGET: ${{ matrix.target }} + BUILD_PROFILE: ${{ matrix.mode }} + run: bash ci/run.bash + - name: Run cargo check and clippy + if: matrix.mode != 'release' + env: + TARGET: ${{ matrix.target }} + # os-specific code leads to lints escaping if we only run this in one target + run: | + cargo check --all --all-targets --features test + git ls-files -- '*.rs' | xargs touch + cargo clippy --workspace --all-targets --features test + - name: Upload the built artifact + if: matrix.mode == 'release' + uses: actions/upload-artifact@v3 + with: + name: rustup-init-${{ matrix.target }} + path: | + target/${{ matrix.target }}/release/rustup-init.exe + retention-days: 7 + - name: Acquire the AWS tooling + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + choco upgrade awscli + - name: Prepare the dist + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + .\ci\prepare-deploy.ps1 + shell: powershell + - name: Deploy build to dev-static dist tree for release team + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + aws --debug s3 cp --recursive dist s3://dev-static-rust-lang-org/rustup/dist + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-1 + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache diff --git a/.github/workflows/windows-builds-on-stable.yaml b/.github/workflows/windows-builds-on-stable.yaml new file mode 100644 index 0000000..d8cc830 --- /dev/null +++ b/.github/workflows/windows-builds-on-stable.yaml @@ -0,0 +1,150 @@ +# This is ci/actions-templates/windows-builds-template.yaml +# Do not edit this file in .github/workflows + +name: Windows (stable) # skip-master skip-pr + +on: + push: # skip-pr + branches: # skip-pr + - stable # skip-pr skip-master + +jobs: + build: + name: Build + runs-on: windows-latest + env: + RUSTFLAGS: -Ctarget-feature=+crt-static + strategy: + fail-fast: false + matrix: + target: + - x86_64-pc-windows-msvc + - i686-pc-windows-msvc # skip-pr skip-master + - aarch64-pc-windows-msvc # skip-pr + - x86_64-pc-windows-gnu # skip-pr + - i686-pc-windows-gnu # skip-pr skip-master + mode: + - dev + - release + include: + - target: x86_64-pc-windows-msvc + run_tests: YES + - target: x86_64-pc-windows-gnu # skip-pr + mingw: https://ci-mirrors.rust-lang.org/rustc/x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z # skip-pr + mingwdir: mingw64 # skip-pr + - target: i686-pc-windows-gnu # skip-pr skip-master + mingwdir: mingw32 # skip-pr skip-master + mingw: https://ci-mirrors.rust-lang.org/rustc/i686-6.3.0-release-posix-dwarf-rt_v5-rev2.7z # skip-pr skip-master + steps: + - uses: actions/checkout@v3 + # v2 defaults to a shallow checkout, but we need at least to the previous tag + with: + fetch-depth: 0 + - name: Acquire tags for the repo + run: | + git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/* + - name: Display the current git status + run: | + git status + git describe + - name: Prep cargo dirs + run: | + New-Item "${env:USERPROFILE}\.cargo\registry" -ItemType Directory -Force + New-Item "${env:USERPROFILE}\.cargo\git" -ItemType Directory -Force + shell: powershell + - name: Install mingw + run: | + # We retrieve mingw from the Rust CI buckets + # Disable the download progress bar which can cause perf issues + $ProgressPreference = "SilentlyContinue" + Invoke-WebRequest ${{ matrix.mingw }} -OutFile mingw.7z + 7z x -y mingw.7z -oC:\msys64 | Out-Null + del mingw.7z + echo "C:\msys64\usr\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + echo "C:\msys64\${{ matrix.mingwdir }}\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + shell: powershell + if: matrix.mingw != '' + - name: Set PATH + run: | + echo "%USERPROFILE%\.cargo\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + echo "TARGET=${{ matrix.target }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + - name: Skip tests + if: matrix.run_tests == '' || matrix.mode == 'release' + run: | + echo "SKIP_TESTS=yes" >> $GITHUB_ENV + shell: bash + - name: Cache cargo registry and git trees + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Get rustc commit hash + id: cargo-target-cache + run: | + echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT + shell: bash + - name: Cache cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rustup using win.rustup.rs + run: | + # Disable the download progress bar which can cause perf issues + $ProgressPreference = "SilentlyContinue" + Invoke-WebRequest https://win.rustup.rs/ -OutFile rustup-init.exe + .\rustup-init.exe -y --default-host=x86_64-pc-windows-msvc --profile=minimal + del rustup-init.exe + shell: powershell + - name: Ensure stable toolchain is up to date + run: rustup update stable + shell: bash + - name: Install the target + run: | + rustup target install ${{ matrix.target }} + - name: Run a full build + env: + TARGET: ${{ matrix.target }} + BUILD_PROFILE: ${{ matrix.mode }} + run: bash ci/run.bash + - name: Run cargo check and clippy + if: matrix.mode != 'release' + env: + TARGET: ${{ matrix.target }} + # os-specific code leads to lints escaping if we only run this in one target + run: | + cargo check --all --all-targets --features test + git ls-files -- '*.rs' | xargs touch + cargo clippy --workspace --all-targets --features test + - name: Upload the built artifact + if: matrix.mode == 'release' + uses: actions/upload-artifact@v3 + with: + name: rustup-init-${{ matrix.target }} + path: | + target/${{ matrix.target }}/release/rustup-init.exe + retention-days: 7 + - name: Acquire the AWS tooling + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + choco upgrade awscli + - name: Prepare the dist + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + .\ci\prepare-deploy.ps1 + shell: powershell + - name: Deploy build to dev-static dist tree for release team + if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' + run: | + aws --debug s3 cp --recursive dist s3://dev-static-rust-lang-org/rustup/dist + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-1 + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache