Auto merge of #66739 - pietroalbini:rollup-2t2pd4a, r=pietroalbini
Rollup of 7 pull requests Successful merges: - #65613 (Preserve whitespace inside one-backtick codeblocks) - #66512 (Add unix::process::CommandExt::arg0) - #66569 (GitHub Actions: preparations, part 1) - #66678 (Remove useless line for error index generation) - #66684 (Drive-by cleanup in region naming) - #66694 (Add some comments to panic runtime) - #66698 (tidy: Remove unused import) Failed merges: r? @ghost
This commit is contained in:
commit
a44774c3a9
22 changed files with 251 additions and 289 deletions
|
@ -262,6 +262,8 @@ pub enum CiEnv {
|
|||
None,
|
||||
/// The Azure Pipelines environment, for Linux (including Docker), Windows, and macOS builds.
|
||||
AzurePipelines,
|
||||
/// The GitHub Actions environment, for Linux (including Docker), Windows and macOS builds.
|
||||
GitHubActions,
|
||||
}
|
||||
|
||||
impl CiEnv {
|
||||
|
@ -269,6 +271,8 @@ impl CiEnv {
|
|||
pub fn current() -> CiEnv {
|
||||
if env::var("TF_BUILD").ok().map_or(false, |e| &*e == "True") {
|
||||
CiEnv::AzurePipelines
|
||||
} else if env::var("GITHUB_ACTIONS").ok().map_or(false, |e| &*e == "true") {
|
||||
CiEnv::GitHubActions
|
||||
} else {
|
||||
CiEnv::None
|
||||
}
|
||||
|
|
|
@ -19,136 +19,46 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
x86_64-gnu-llvm-6.0:
|
||||
IMAGE: x86_64-gnu-llvm-6.0
|
||||
RUST_BACKTRACE: 1
|
||||
|
||||
dist-x86_64-linux:
|
||||
IMAGE: dist-x86_64-linux
|
||||
DEPLOY: 1
|
||||
|
||||
# "alternate" deployments, these are "nightlies" but have LLVM assertions
|
||||
# turned on, they're deployed to a different location primarily for
|
||||
# additional testing.
|
||||
dist-x86_64-linux: {}
|
||||
dist-x86_64-linux-alt:
|
||||
IMAGE: dist-x86_64-linux
|
||||
DEPLOY_ALT: 1
|
||||
|
||||
# Linux builders, remaining docker images
|
||||
arm-android:
|
||||
IMAGE: arm-android
|
||||
|
||||
armhf-gnu:
|
||||
IMAGE: armhf-gnu
|
||||
|
||||
dist-various-1:
|
||||
IMAGE: dist-various-1
|
||||
DEPLOY: 1
|
||||
|
||||
dist-various-2:
|
||||
IMAGE: dist-various-2
|
||||
DEPLOY: 1
|
||||
|
||||
dist-aarch64-linux:
|
||||
IMAGE: dist-aarch64-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-android:
|
||||
IMAGE: dist-android
|
||||
DEPLOY: 1
|
||||
|
||||
dist-arm-linux:
|
||||
IMAGE: dist-arm-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-armhf-linux:
|
||||
IMAGE: dist-armhf-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-armv7-linux:
|
||||
IMAGE: dist-armv7-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-i586-gnu-i586-i686-musl:
|
||||
IMAGE: dist-i586-gnu-i586-i686-musl
|
||||
DEPLOY: 1
|
||||
|
||||
dist-i686-freebsd:
|
||||
IMAGE: dist-i686-freebsd
|
||||
DEPLOY: 1
|
||||
|
||||
dist-i686-linux:
|
||||
IMAGE: dist-i686-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-mips-linux:
|
||||
IMAGE: dist-mips-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-mips64-linux:
|
||||
IMAGE: dist-mips64-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-mips64el-linux:
|
||||
IMAGE: dist-mips64el-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-mipsel-linux:
|
||||
IMAGE: dist-mipsel-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-powerpc-linux:
|
||||
IMAGE: dist-powerpc-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-powerpc64-linux:
|
||||
IMAGE: dist-powerpc64-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-powerpc64le-linux:
|
||||
IMAGE: dist-powerpc64le-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-s390x-linux:
|
||||
IMAGE: dist-s390x-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-x86_64-freebsd:
|
||||
IMAGE: dist-x86_64-freebsd
|
||||
DEPLOY: 1
|
||||
|
||||
dist-x86_64-musl:
|
||||
IMAGE: dist-x86_64-musl
|
||||
DEPLOY: 1
|
||||
|
||||
dist-x86_64-netbsd:
|
||||
IMAGE: dist-x86_64-netbsd
|
||||
DEPLOY: 1
|
||||
|
||||
i686-gnu:
|
||||
IMAGE: i686-gnu
|
||||
i686-gnu-nopt:
|
||||
IMAGE: i686-gnu-nopt
|
||||
test-various:
|
||||
IMAGE: test-various
|
||||
wasm32:
|
||||
IMAGE: wasm32
|
||||
x86_64-gnu:
|
||||
IMAGE: x86_64-gnu
|
||||
x86_64-gnu-full-bootstrap:
|
||||
IMAGE: x86_64-gnu-full-bootstrap
|
||||
x86_64-gnu-aux:
|
||||
IMAGE: x86_64-gnu-aux
|
||||
arm-android: {}
|
||||
armhf-gnu: {}
|
||||
dist-various-1: {}
|
||||
dist-various-2: {}
|
||||
dist-aarch64-linux: {}
|
||||
dist-android: {}
|
||||
dist-arm-linux: {}
|
||||
dist-armhf-linux: {}
|
||||
dist-armv7-linux: {}
|
||||
dist-i586-gnu-i586-i686-musl: {}
|
||||
dist-i686-freebsd: {}
|
||||
dist-i686-linux: {}
|
||||
dist-mips-linux: {}
|
||||
dist-mips64-linux: {}
|
||||
dist-mips64el-linux: {}
|
||||
dist-mipsel-linux: {}
|
||||
dist-powerpc-linux: {}
|
||||
dist-powerpc64-linux: {}
|
||||
dist-powerpc64le-linux: {}
|
||||
dist-s390x-linux: {}
|
||||
dist-x86_64-freebsd: {}
|
||||
dist-x86_64-musl: {}
|
||||
dist-x86_64-netbsd: {}
|
||||
i686-gnu: {}
|
||||
i686-gnu-nopt: {}
|
||||
test-various: {}
|
||||
wasm32: {}
|
||||
x86_64-gnu: {}
|
||||
x86_64-gnu-full-bootstrap: {}
|
||||
x86_64-gnu-aux: {}
|
||||
x86_64-gnu-tools:
|
||||
IMAGE: x86_64-gnu-tools
|
||||
DEPLOY_TOOLSTATES_JSON: toolstates-linux.json
|
||||
x86_64-gnu-debug:
|
||||
IMAGE: x86_64-gnu-debug
|
||||
x86_64-gnu-nopt:
|
||||
IMAGE: x86_64-gnu-nopt
|
||||
x86_64-gnu-distcheck:
|
||||
IMAGE: x86_64-gnu-distcheck
|
||||
mingw-check:
|
||||
IMAGE: mingw-check
|
||||
x86_64-gnu-debug: {}
|
||||
x86_64-gnu-nopt: {}
|
||||
x86_64-gnu-distcheck: {}
|
||||
mingw-check: {}
|
||||
|
||||
- job: macOS
|
||||
timeoutInMinutes: 600
|
||||
|
@ -176,7 +86,6 @@ jobs:
|
|||
dist-x86_64-apple:
|
||||
SCRIPT: ./x.py dist
|
||||
RUST_CONFIGURE_ARGS: --target=aarch64-apple-ios,armv7-apple-ios,armv7s-apple-ios,i386-apple-ios,x86_64-apple-ios --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc
|
||||
DEPLOY: 1
|
||||
RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.7
|
||||
NO_LLVM_ASSERTIONS: 1
|
||||
|
@ -186,7 +95,6 @@ jobs:
|
|||
dist-x86_64-apple-alt:
|
||||
SCRIPT: ./x.py dist
|
||||
RUST_CONFIGURE_ARGS: --enable-extended --enable-profiler --set rust.jemalloc
|
||||
DEPLOY_ALT: 1
|
||||
RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.7
|
||||
NO_LLVM_ASSERTIONS: 1
|
||||
|
@ -204,7 +112,6 @@ jobs:
|
|||
dist-i686-apple:
|
||||
SCRIPT: ./x.py dist
|
||||
RUST_CONFIGURE_ARGS: --build=i686-apple-darwin --enable-full-tools --enable-profiler --set rust.jemalloc
|
||||
DEPLOY: 1
|
||||
RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.7
|
||||
NO_LLVM_ASSERTIONS: 1
|
||||
|
@ -304,7 +211,6 @@ jobs:
|
|||
--enable-profiler
|
||||
SCRIPT: python x.py dist
|
||||
DIST_REQUIRE_ALL_TOOLS: 1
|
||||
DEPLOY: 1
|
||||
dist-i686-msvc:
|
||||
RUST_CONFIGURE_ARGS: >-
|
||||
--build=i686-pc-windows-msvc
|
||||
|
@ -313,22 +219,18 @@ jobs:
|
|||
--enable-profiler
|
||||
SCRIPT: python x.py dist
|
||||
DIST_REQUIRE_ALL_TOOLS: 1
|
||||
DEPLOY: 1
|
||||
dist-i686-mingw:
|
||||
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
|
||||
DEPLOY: 1
|
||||
dist-x86_64-mingw:
|
||||
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
|
||||
DEPLOY: 1
|
||||
|
||||
# "alternate" deployment, see .travis.yml for more info
|
||||
dist-x86_64-msvc-alt:
|
||||
RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-extended --enable-profiler
|
||||
SCRIPT: python x.py dist
|
||||
DEPLOY_ALT: 1
|
||||
|
|
|
@ -18,10 +18,7 @@ jobs:
|
|||
- template: steps/run.yml
|
||||
strategy:
|
||||
matrix:
|
||||
x86_64-gnu-llvm-6.0:
|
||||
IMAGE: x86_64-gnu-llvm-6.0
|
||||
mingw-check:
|
||||
IMAGE: mingw-check
|
||||
x86_64-gnu-llvm-6.0: {}
|
||||
mingw-check: {}
|
||||
x86_64-gnu-tools:
|
||||
IMAGE: x86_64-gnu-tools
|
||||
CI_ONLY_WHEN_SUBMODULES_CHANGED: 1
|
||||
|
|
|
@ -28,6 +28,9 @@ steps:
|
|||
- checkout: self
|
||||
fetchDepth: 2
|
||||
|
||||
- bash: src/ci/scripts/setup-environment.sh
|
||||
displayName: Setup environment
|
||||
|
||||
- bash: src/ci/scripts/should-skip-this.sh
|
||||
displayName: Decide whether to run this job
|
||||
|
||||
|
@ -38,38 +41,26 @@ steps:
|
|||
displayName: Show the current environment
|
||||
|
||||
- bash: src/ci/scripts/install-sccache.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Install sccache
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/install-clang.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Install clang
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/switch-xcode.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Switch to Xcode 9.3
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/install-wix.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Install wix
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/install-innosetup.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Install InnoSetup
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/windows-symlink-build-dir.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Ensure the build happens on C:\ instead of D:\
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
|
@ -78,35 +69,22 @@ steps:
|
|||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/install-msys2.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
SYSTEM_WORKFOLDER: $(System.Workfolder)
|
||||
displayName: Install msys2
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/install-msys2-packages.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
SYSTEM_WORKFOLDER: $(System.Workfolder)
|
||||
displayName: Install msys2 packages
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/install-mingw.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
SYSTEM_WORKFOLDER: $(System.Workfolder)
|
||||
displayName: Install MinGW
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/install-ninja.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Install ninja
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/enable-docker-ipv6.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Enable IPv6 on Docker
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
|
@ -120,22 +98,16 @@ steps:
|
|||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/checkout-submodules.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Checkout submodules
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
- bash: src/ci/scripts/verify-line-endings.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
displayName: Verify line endings
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
|
||||
# Ensure the `aws` CLI is installed so we can deploy later on, cache docker
|
||||
# images, etc.
|
||||
- bash: src/ci/scripts/install-awscli.sh
|
||||
env:
|
||||
AGENT_OS: $(Agent.OS)
|
||||
condition: and(succeeded(), not(variables.SKIP_JOB))
|
||||
displayName: Install awscli
|
||||
|
||||
|
|
|
@ -6,72 +6,19 @@ variables:
|
|||
- group: prod-credentials
|
||||
|
||||
jobs:
|
||||
- job: Linux
|
||||
- job: Windows
|
||||
timeoutInMinutes: 600
|
||||
pool:
|
||||
vmImage: ubuntu-16.04
|
||||
vmImage: 'vs2017-win2016'
|
||||
steps:
|
||||
- template: steps/run.yml
|
||||
strategy:
|
||||
matrix:
|
||||
dist-x86_64-linux:
|
||||
IMAGE: dist-x86_64-linux
|
||||
DEPLOY: 1
|
||||
|
||||
dist-x86_64-linux-alt:
|
||||
IMAGE: dist-x86_64-linux
|
||||
DEPLOY_ALT: 1
|
||||
|
||||
# The macOS and Windows builds here are currently disabled due to them not being
|
||||
# overly necessary on `try` builds. We also don't actually have anything that
|
||||
# consumes the artifacts currently. Perhaps one day we can reenable, but for now
|
||||
# it helps free up capacity on Azure.
|
||||
# - job: macOS
|
||||
# timeoutInMinutes: 600
|
||||
# pool:
|
||||
# vmImage: macos-10.13
|
||||
# steps:
|
||||
# - template: steps/run.yml
|
||||
# strategy:
|
||||
# matrix:
|
||||
# dist-x86_64-apple:
|
||||
# SCRIPT: ./x.py dist
|
||||
# RUST_CONFIGURE_ARGS: --target=aarch64-apple-ios,armv7-apple-ios,armv7s-apple-ios,i386-apple-ios,x86_64-apple-ios --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc
|
||||
# DEPLOY: 1
|
||||
# RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
|
||||
# MACOSX_DEPLOYMENT_TARGET: 10.7
|
||||
# NO_LLVM_ASSERTIONS: 1
|
||||
# NO_DEBUG_ASSERTIONS: 1
|
||||
# DIST_REQUIRE_ALL_TOOLS: 1
|
||||
#
|
||||
# dist-x86_64-apple-alt:
|
||||
# SCRIPT: ./x.py dist
|
||||
# RUST_CONFIGURE_ARGS: --enable-extended --enable-profiler --set rust.jemalloc
|
||||
# DEPLOY_ALT: 1
|
||||
# RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
|
||||
# MACOSX_DEPLOYMENT_TARGET: 10.7
|
||||
# NO_LLVM_ASSERTIONS: 1
|
||||
# NO_DEBUG_ASSERTIONS: 1
|
||||
#
|
||||
# - job: Windows
|
||||
# timeoutInMinutes: 600
|
||||
# pool:
|
||||
# vmImage: 'vs2017-win2016'
|
||||
# steps:
|
||||
# - template: steps/run.yml
|
||||
# strategy:
|
||||
# matrix:
|
||||
# dist-x86_64-msvc:
|
||||
# RUST_CONFIGURE_ARGS: >
|
||||
# --build=x86_64-pc-windows-msvc
|
||||
# --target=x86_64-pc-windows-msvc,aarch64-pc-windows-msvc
|
||||
# --enable-full-tools
|
||||
# --enable-profiler
|
||||
# SCRIPT: python x.py dist
|
||||
# DIST_REQUIRE_ALL_TOOLS: 1
|
||||
# DEPLOY: 1
|
||||
#
|
||||
# dist-x86_64-msvc-alt:
|
||||
# RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-extended --enable-profiler
|
||||
# SCRIPT: python x.py dist
|
||||
# DEPLOY_ALT: 1
|
||||
dist-x86_64-msvc:
|
||||
RUST_CONFIGURE_ARGS: >-
|
||||
--build=x86_64-pc-windows-msvc
|
||||
--target=x86_64-pc-windows-msvc,aarch64-pc-windows-msvc
|
||||
--enable-full-tools
|
||||
--enable-profiler
|
||||
SCRIPT: python x.py dist
|
||||
DIST_REQUIRE_ALL_TOOLS: 1
|
||||
|
|
|
@ -172,6 +172,8 @@ docker \
|
|||
--env CI \
|
||||
--env TF_BUILD \
|
||||
--env BUILD_SOURCEBRANCHNAME \
|
||||
--env GITHUB_ACTIONS \
|
||||
--env GITHUB_REF \
|
||||
--env TOOLSTATE_REPO_ACCESS_TOKEN \
|
||||
--env TOOLSTATE_REPO \
|
||||
--env TOOLSTATE_PUBLISH \
|
||||
|
|
|
@ -23,9 +23,7 @@ fi
|
|||
ci_dir=`cd $(dirname $0) && pwd`
|
||||
source "$ci_dir/shared.sh"
|
||||
|
||||
branch_name=$(getCIBranch)
|
||||
|
||||
if [ ! isCI ] || [ "$branch_name" = "auto" ] || [ "$branch_name" = "try" ]; then
|
||||
if [ ! isCI ] || isCiBranch auto || isCiBranch beta; then
|
||||
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set build.print-step-timings --enable-verbose-tests"
|
||||
fi
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ if isWindows; then
|
|||
if [[ "${CUSTOM_MINGW-0}" -ne 1 ]]; then
|
||||
pacman -S --noconfirm --needed mingw-w64-$arch-toolchain mingw-w64-$arch-cmake \
|
||||
mingw-w64-$arch-gcc mingw-w64-$arch-python2
|
||||
ciCommandAddPath "${SYSTEM_WORKFOLDER}/msys2/mingw${bits}/bin"
|
||||
ciCommandAddPath "$(ciCheckoutPath)/msys2/mingw${bits}/bin"
|
||||
else
|
||||
mingw_dir="mingw${bits}"
|
||||
|
||||
|
|
|
@ -12,8 +12,8 @@ IFS=$'\n\t'
|
|||
source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"
|
||||
|
||||
if isWindows; then
|
||||
choco install msys2 --params="/InstallDir:${SYSTEM_WORKFOLDER}/msys2 /NoPath" -y --no-progress
|
||||
mkdir -p "${SYSTEM_WORKFOLDER}/msys2/home/${USERNAME}"
|
||||
choco install msys2 --params="/InstallDir:$(ciCheckoutPath)/msys2 /NoPath" -y --no-progress
|
||||
mkdir -p "$(ciCheckoutPath)/msys2/home/${USERNAME}"
|
||||
|
||||
ciCommandAddPath "${SYSTEM_WORKFOLDER}/msys2/usr/bin"
|
||||
ciCommandAddPath "$(ciCheckoutPath)/msys2/usr/bin"
|
||||
fi
|
||||
|
|
31
src/ci/scripts/setup-environment.sh
Executable file
31
src/ci/scripts/setup-environment.sh
Executable file
|
@ -0,0 +1,31 @@
|
|||
#!/bin/bash
|
||||
# This script guesses some environment variables based on the builder name and
|
||||
# the current platform, to reduce the amount of variables defined in the CI
|
||||
# configuration.
|
||||
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"
|
||||
|
||||
# Builders starting with `dist-` are dist builders, but if they also end with
|
||||
# `-alt` they are alternate dist builders.
|
||||
if [[ "${CI_JOB_NAME}" = dist-* ]]; then
|
||||
if [[ "${CI_JOB_NAME}" = *-alt ]]; then
|
||||
echo "alternate dist builder detected, setting DEPLOY_ALT=1"
|
||||
ciCommandSetEnv DEPLOY_ALT 1
|
||||
else
|
||||
echo "normal dist builder detected, setting DEPLOY=1"
|
||||
ciCommandSetEnv DEPLOY 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# All the Linux builds happen inside Docker.
|
||||
if isLinux; then
|
||||
if [[ -z "${IMAGE+x}" ]]; then
|
||||
echo "linux builder detected, using docker to run the build"
|
||||
ciCommandSetEnv IMAGE "${CI_JOB_NAME}"
|
||||
else
|
||||
echo "a custom docker image is already set"
|
||||
fi
|
||||
fi
|
|
@ -27,27 +27,66 @@ function retry {
|
|||
}
|
||||
|
||||
function isCI {
|
||||
[ "$CI" = "true" ] || [ "$TF_BUILD" = "True" ]
|
||||
[[ "${CI-false}" = "true" ]] || isAzurePipelines || isGitHubActions
|
||||
}
|
||||
|
||||
function isAzurePipelines {
|
||||
[[ "${TF_BUILD-False}" = "True" ]]
|
||||
}
|
||||
|
||||
function isGitHubActions {
|
||||
[[ "${GITHUB_ACTIONS-false}" = "true" ]]
|
||||
}
|
||||
|
||||
function isMacOS {
|
||||
[ "$AGENT_OS" = "Darwin" ]
|
||||
[[ "${OSTYPE}" = "darwin"* ]]
|
||||
}
|
||||
|
||||
function isWindows {
|
||||
[ "$AGENT_OS" = "Windows_NT" ]
|
||||
[[ "${OSTYPE}" = "cygwin" ]] || [[ "${OSTYPE}" = "msys" ]]
|
||||
}
|
||||
|
||||
function isLinux {
|
||||
[ "$AGENT_OS" = "Linux" ]
|
||||
[[ "${OSTYPE}" = "linux-gnu" ]]
|
||||
}
|
||||
|
||||
function getCIBranch {
|
||||
echo "$BUILD_SOURCEBRANCHNAME"
|
||||
function isCiBranch {
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "usage: $0 <branch-name>"
|
||||
exit 1
|
||||
fi
|
||||
name="$1"
|
||||
|
||||
if isAzurePipelines; then
|
||||
[[ "${BUILD_SOURCEBRANCHNAME}" = "${name}" ]]
|
||||
elif isGitHubActions; then
|
||||
[[ "${GITHUB_REF}" = "refs/heads/${name}" ]]
|
||||
else
|
||||
echo "isCiBranch only works inside CI!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function ciCommit {
|
||||
echo "${BUILD_SOURCEVERSION}"
|
||||
if isAzurePipelines; then
|
||||
echo "${BUILD_SOURCEVERSION}"
|
||||
elif isGitHubActions; then
|
||||
echo "${GITHUB_SHA}"
|
||||
else
|
||||
echo "ciCommit only works inside CI!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function ciCheckoutPath {
|
||||
if isAzurePipelines; then
|
||||
echo "${SYSTEM_WORKFOLDER}"
|
||||
elif isGitHubActions; then
|
||||
echo "${GITHUB_WORKSPACE}"
|
||||
else
|
||||
echo "ciCheckoutPath only works inside CI!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function ciCommandAddPath {
|
||||
|
@ -57,7 +96,14 @@ function ciCommandAddPath {
|
|||
fi
|
||||
path="$1"
|
||||
|
||||
echo "##vso[task.prependpath]${path}"
|
||||
if isAzurePipelines; then
|
||||
echo "##vso[task.prependpath]${path}"
|
||||
elif isGitHubActions; then
|
||||
echo "::add-path::${value}"
|
||||
else
|
||||
echo "ciCommandAddPath only works inside CI!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function ciCommandSetEnv {
|
||||
|
@ -68,5 +114,12 @@ function ciCommandSetEnv {
|
|||
name="$1"
|
||||
value="$2"
|
||||
|
||||
echo "##vso[task.setvariable variable=${name}]${value}"
|
||||
if isAzurePipelines; then
|
||||
echo "##vso[task.setvariable variable=${name}]${value}"
|
||||
elif isGitHubActions; then
|
||||
echo "::set-env name=${name}::${value}"
|
||||
else
|
||||
echo "ciCommandSetEnv only works inside CI!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -6,8 +6,7 @@
|
|||
//! interface for panicking is:
|
||||
//!
|
||||
//! ```
|
||||
//! # use std::fmt;
|
||||
//! fn panic_impl(fmt: fmt::Arguments, file_line_col: &(&'static str, u32, u32)) -> !
|
||||
//! fn panic_impl(pi: &core::panic::PanicInfo<'_>) -> !
|
||||
//! # { loop {} }
|
||||
//! ```
|
||||
//!
|
||||
|
@ -35,7 +34,7 @@ use crate::panic::{Location, PanicInfo};
|
|||
// never inline unless panic_immediate_abort to avoid code
|
||||
// bloat at the call sites as much as possible
|
||||
#[cfg_attr(not(feature="panic_immediate_abort"),inline(never))]
|
||||
#[lang = "panic"]
|
||||
#[lang = "panic"] // needed by codegen for panic on overflow and other `Assert` MIR terminators
|
||||
pub fn panic(expr: &str, location: &Location<'_>) -> ! {
|
||||
if cfg!(feature = "panic_immediate_abort") {
|
||||
unsafe { super::intrinsics::abort() }
|
||||
|
@ -52,7 +51,7 @@ pub fn panic(expr: &str, location: &Location<'_>) -> ! {
|
|||
|
||||
#[cold]
|
||||
#[cfg_attr(not(feature="panic_immediate_abort"),inline(never))]
|
||||
#[lang = "panic_bounds_check"]
|
||||
#[lang = "panic_bounds_check"] // needed by codegen for panic on OOB array/slice access
|
||||
fn panic_bounds_check(location: &Location<'_>, index: usize, len: usize) -> ! {
|
||||
if cfg!(feature = "panic_immediate_abort") {
|
||||
unsafe { super::intrinsics::abort() }
|
||||
|
|
|
@ -77,17 +77,30 @@ impl RegionErrorNamingCtx {
|
|||
}
|
||||
}
|
||||
|
||||
/// Get the name of `region` if it has previously been named.
|
||||
crate fn get(&self, region: &RegionVid) -> Option<&RegionName> {
|
||||
self.renctx.get(region)
|
||||
}
|
||||
|
||||
/// Give `region` the name `name`.
|
||||
crate fn insert(&mut self, region: RegionVid, name: RegionName) {
|
||||
self.renctx.insert(region, name);
|
||||
}
|
||||
|
||||
/// Creates a synthetic region named `'N`, where `N` is the next value of the counter. Then,
|
||||
/// increment the counter.
|
||||
///
|
||||
/// The name is not memoized. A separate call to `insert` should be made later. (Currently,
|
||||
/// this happens at the end of `give_region_a_name`).
|
||||
crate fn synthesize_region_name(&mut self) -> Symbol {
|
||||
let c = self.counter;
|
||||
self.counter += 1;
|
||||
|
||||
Symbol::intern(&format!("'{:?}", c))
|
||||
}
|
||||
}
|
||||
|
||||
impl RegionName {
|
||||
#[allow(dead_code)]
|
||||
crate fn was_named(&self) -> bool {
|
||||
match self.source {
|
||||
RegionNameSource::NamedEarlyBoundRegion(..) |
|
||||
|
@ -103,12 +116,6 @@ impl RegionName {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
crate fn was_synthesized(&self) -> bool {
|
||||
!self.was_named()
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
crate fn name(&self) -> Symbol {
|
||||
self.name
|
||||
}
|
||||
|
@ -298,7 +305,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||
} else {
|
||||
bug!("Closure is not defined by a closure expr");
|
||||
};
|
||||
let region_name = self.synthesize_region_name(renctx);
|
||||
let region_name = renctx.synthesize_region_name();
|
||||
|
||||
let closure_kind_ty = substs.as_closure().kind_ty(def_id, tcx);
|
||||
let note = match closure_kind_ty.to_opt_closure_kind() {
|
||||
|
@ -478,7 +485,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||
// This counter value will already have been used, so this function will increment
|
||||
// it so the next value will be used next and return the region name that would
|
||||
// have been used.
|
||||
name: self.synthesize_region_name(renctx),
|
||||
name: renctx.synthesize_region_name(),
|
||||
source: RegionNameSource::CannotMatchHirTy(span, type_name),
|
||||
})
|
||||
} else {
|
||||
|
@ -533,7 +540,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||
hir::TyKind::Rptr(_lifetime, referent_hir_ty),
|
||||
) => {
|
||||
if region.to_region_vid() == needle_fr {
|
||||
let region_name = self.synthesize_region_name(renctx);
|
||||
let region_name = renctx.synthesize_region_name();
|
||||
|
||||
// Just grab the first character, the `&`.
|
||||
let source_map = tcx.sess.source_map();
|
||||
|
@ -621,7 +628,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||
| hir::LifetimeName::Error
|
||||
| hir::LifetimeName::Static
|
||||
| hir::LifetimeName::Underscore => {
|
||||
let region_name = self.synthesize_region_name(renctx);
|
||||
let region_name = renctx.synthesize_region_name();
|
||||
let ampersand_span = lifetime.span;
|
||||
Some(RegionName {
|
||||
name: region_name,
|
||||
|
@ -713,7 +720,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||
let upvar_index = self.get_upvar_index_for_region(tcx, fr)?;
|
||||
let (upvar_name, upvar_span) =
|
||||
self.get_upvar_name_and_span_for_region(tcx, upvars, upvar_index);
|
||||
let region_name = self.synthesize_region_name(renctx);
|
||||
let region_name = renctx.synthesize_region_name();
|
||||
|
||||
Some(RegionName {
|
||||
name: region_name,
|
||||
|
@ -776,7 +783,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||
// This counter value will already have been used, so this function will increment it
|
||||
// so the next value will be used next and return the region name that would have been
|
||||
// used.
|
||||
name: self.synthesize_region_name(renctx),
|
||||
name: renctx.synthesize_region_name(),
|
||||
source: RegionNameSource::AnonRegionFromOutput(
|
||||
return_span,
|
||||
mir_description.to_string(),
|
||||
|
@ -831,16 +838,8 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||
);
|
||||
|
||||
Some(RegionName {
|
||||
name: self.synthesize_region_name(renctx),
|
||||
name: renctx.synthesize_region_name(),
|
||||
source: RegionNameSource::AnonRegionFromYieldTy(yield_span, type_name),
|
||||
})
|
||||
}
|
||||
|
||||
/// Creates a synthetic region named `'1`, incrementing the counter.
|
||||
fn synthesize_region_name(&self, renctx: &mut RegionErrorNamingCtx) -> Symbol {
|
||||
let c = renctx.counter;
|
||||
renctx.counter += 1;
|
||||
|
||||
Symbol::intern(&format!("'{:?}", c))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -376,7 +376,7 @@ nav.sub {
|
|||
text-overflow: ellipsis;
|
||||
margin: 0;
|
||||
}
|
||||
.docblock-short code {
|
||||
.docblock code, .docblock-short code {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,8 @@ extern {
|
|||
data: *mut u8,
|
||||
data_ptr: *mut usize,
|
||||
vtable_ptr: *mut usize) -> u32;
|
||||
|
||||
/// `payload` is actually a `*mut &mut dyn BoxMeUp` but that would cause FFI warnings.
|
||||
#[unwind(allowed)]
|
||||
fn __rust_start_panic(payload: usize) -> u32;
|
||||
}
|
||||
|
@ -294,7 +296,7 @@ pub fn panicking() -> bool {
|
|||
update_panic_count(0) != 0
|
||||
}
|
||||
|
||||
/// Entry point of panic from the libcore crate.
|
||||
/// Entry point of panic from the libcore crate (`panic_impl` lang item).
|
||||
#[cfg(not(test))]
|
||||
#[panic_handler]
|
||||
#[unwind(allowed)]
|
||||
|
@ -380,7 +382,7 @@ fn continue_panic_fmt(info: &PanicInfo<'_>) -> ! {
|
|||
#[unstable(feature = "libstd_sys_internals",
|
||||
reason = "used by the panic! macro",
|
||||
issue = "0")]
|
||||
#[cfg_attr(not(test), lang = "begin_panic")]
|
||||
#[cfg_attr(not(test), lang = "begin_panic")] // lang item for CTFE panic support
|
||||
// never inline unless panic_immediate_abort to avoid code
|
||||
// bloat at the call sites as much as possible
|
||||
#[cfg_attr(not(feature="panic_immediate_abort"),inline(never))]
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
use crate::ffi::OsStr;
|
||||
use crate::io;
|
||||
use crate::os::unix::io::{FromRawFd, RawFd, AsRawFd, IntoRawFd};
|
||||
use crate::process;
|
||||
|
@ -103,6 +104,14 @@ pub trait CommandExt {
|
|||
/// cross-platform `spawn` instead.
|
||||
#[stable(feature = "process_exec2", since = "1.9.0")]
|
||||
fn exec(&mut self) -> io::Error;
|
||||
|
||||
/// Set executable argument
|
||||
///
|
||||
/// Set the first process argument, `argv[0]`, to something other than the
|
||||
/// default executable path.
|
||||
#[unstable(feature = "process_set_argv0", issue = "66510")]
|
||||
fn arg0<S>(&mut self, arg: S) -> &mut process::Command
|
||||
where S: AsRef<OsStr>;
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -127,6 +136,13 @@ impl CommandExt for process::Command {
|
|||
fn exec(&mut self) -> io::Error {
|
||||
self.as_inner_mut().exec(sys::process::Stdio::Inherit)
|
||||
}
|
||||
|
||||
fn arg0<S>(&mut self, arg: S) -> &mut process::Command
|
||||
where S: AsRef<OsStr>
|
||||
{
|
||||
self.as_inner_mut().set_arg_0(arg.as_ref());
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
/// Unix-specific extensions to [`process::ExitStatus`].
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use crate::os::unix::prelude::*;
|
||||
|
||||
use crate::ffi::{OsString, OsStr, CString};
|
||||
use crate::ffi::{OsString, OsStr, CString, CStr};
|
||||
use crate::fmt;
|
||||
use crate::io;
|
||||
use crate::ptr;
|
||||
|
@ -11,10 +11,7 @@ use crate::sys_common::process::CommandEnv;
|
|||
use crate::collections::BTreeMap;
|
||||
|
||||
#[cfg(not(target_os = "fuchsia"))]
|
||||
use {
|
||||
crate::ffi::CStr,
|
||||
crate::sys::fs::OpenOptions,
|
||||
};
|
||||
use crate::sys::fs::OpenOptions;
|
||||
|
||||
use libc::{c_int, gid_t, uid_t, c_char, EXIT_SUCCESS, EXIT_FAILURE};
|
||||
|
||||
|
@ -135,8 +132,8 @@ impl Command {
|
|||
let program = os2c(program, &mut saw_nul);
|
||||
Command {
|
||||
argv: Argv(vec![program.as_ptr(), ptr::null()]),
|
||||
args: vec![program.clone()],
|
||||
program,
|
||||
args: Vec::new(),
|
||||
env: Default::default(),
|
||||
cwd: None,
|
||||
uid: None,
|
||||
|
@ -149,11 +146,19 @@ impl Command {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn set_arg_0(&mut self, arg: &OsStr) {
|
||||
// Set a new arg0
|
||||
let arg = os2c(arg, &mut self.saw_nul);
|
||||
debug_assert!(self.argv.0.len() > 1);
|
||||
self.argv.0[0] = arg.as_ptr();
|
||||
self.args[0] = arg;
|
||||
}
|
||||
|
||||
pub fn arg(&mut self, arg: &OsStr) {
|
||||
// Overwrite the trailing NULL pointer in `argv` and then add a new null
|
||||
// pointer.
|
||||
let arg = os2c(arg, &mut self.saw_nul);
|
||||
self.argv.0[self.args.len() + 1] = arg.as_ptr();
|
||||
self.argv.0[self.args.len()] = arg.as_ptr();
|
||||
self.argv.0.push(ptr::null());
|
||||
|
||||
// Also make sure we keep track of the owned value to schedule a
|
||||
|
@ -178,6 +183,10 @@ impl Command {
|
|||
&self.argv.0
|
||||
}
|
||||
|
||||
pub fn get_program(&self) -> &CStr {
|
||||
&*self.program
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn get_cwd(&self) -> &Option<CString> {
|
||||
&self.cwd
|
||||
|
|
|
@ -110,7 +110,7 @@ impl Command {
|
|||
ZX_HANDLE_INVALID,
|
||||
FDIO_SPAWN_CLONE_JOB | FDIO_SPAWN_CLONE_LDSVC | FDIO_SPAWN_CLONE_NAMESPACE
|
||||
| FDIO_SPAWN_CLONE_ENVIRON, // this is ignored when envp is non-null
|
||||
self.get_argv()[0], self.get_argv().as_ptr(), envp,
|
||||
self.get_program().as_ptr(), self.get_argv().as_ptr(), envp,
|
||||
actions.len() as size_t, actions.as_ptr(),
|
||||
&mut process_handle,
|
||||
ptr::null_mut(),
|
||||
|
|
|
@ -248,7 +248,7 @@ impl Command {
|
|||
*sys::os::environ() = envp.as_ptr();
|
||||
}
|
||||
|
||||
libc::execvp(self.get_argv()[0], self.get_argv().as_ptr());
|
||||
libc::execvp(self.get_program().as_ptr(), self.get_argv().as_ptr());
|
||||
Err(io::Error::last_os_error())
|
||||
}
|
||||
|
||||
|
@ -373,7 +373,7 @@ impl Command {
|
|||
.unwrap_or_else(|| *sys::os::environ() as *const _);
|
||||
let ret = libc::posix_spawnp(
|
||||
&mut p.pid,
|
||||
self.get_argv()[0],
|
||||
self.get_program().as_ptr(),
|
||||
file_actions.0.as_ptr(),
|
||||
attrs.0.as_ptr(),
|
||||
self.get_argv().as_ptr() as *const _,
|
||||
|
|
33
src/test/ui/command-argv0.rs
Normal file
33
src/test/ui/command-argv0.rs
Normal file
|
@ -0,0 +1,33 @@
|
|||
// run-pass
|
||||
|
||||
// ignore-windows - this is a unix-specific test
|
||||
// ignore-cloudabi no processes
|
||||
// ignore-emscripten no processes
|
||||
// ignore-sgx no processes
|
||||
#![feature(process_set_argv0)]
|
||||
|
||||
use std::env;
|
||||
use std::os::unix::process::CommandExt;
|
||||
use std::process::Command;
|
||||
|
||||
fn main() {
|
||||
let args: Vec<_> = env::args().collect();
|
||||
|
||||
if args.len() > 1 {
|
||||
assert_eq!(args[1], "doing-test");
|
||||
assert_eq!(args[0], "i have a silly name");
|
||||
|
||||
println!("passed");
|
||||
return;
|
||||
}
|
||||
|
||||
let output =
|
||||
Command::new(&args[0]).arg("doing-test").arg0("i have a silly name").output().unwrap();
|
||||
assert!(
|
||||
output.stderr.is_empty(),
|
||||
"Non-empty stderr: {}",
|
||||
String::from_utf8_lossy(&output.stderr)
|
||||
);
|
||||
assert!(output.status.success());
|
||||
assert_eq!(output.stdout, b"passed\n");
|
||||
}
|
|
@ -13,7 +13,6 @@ fn main() {
|
|||
|
||||
println!("cargo:rerun-if-changed={}", error_codes_path);
|
||||
let file = fs::read_to_string(error_codes_path).unwrap()
|
||||
.replace("crate::register_diagnostics!", "register_diagnostics!")
|
||||
.replace(": include_str!(\"./error_codes/", ": include_str!(\"./");
|
||||
let contents = format!("(|| {{\n{}\n}})()", file);
|
||||
fs::write(&out_dir.join("all_error_codes.rs"), &contents).unwrap();
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
use std::collections::HashMap;
|
||||
use std::ffi::OsStr;
|
||||
use std::fs::read_to_string;
|
||||
use std::io::Read;
|
||||
use std::path::Path;
|
||||
|
||||
// A few of those error codes can't be tested but all the others can and *should* be tested!
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue