diff --git a/.azure-pipelines/auto.yml b/.azure-pipelines/auto.yml index 68a382bb8a7..4f000e79bd0 100644 --- a/.azure-pipelines/auto.yml +++ b/.azure-pipelines/auto.yml @@ -140,7 +140,6 @@ jobs: IMAGE: x86_64-gnu-aux x86_64-gnu-tools: IMAGE: x86_64-gnu-tools - # FIXME if: branch = auto OR (type = pull_request AND commit_message =~ /(?i:^update.*\b(rls|rustfmt|clippy|miri|cargo)\b)/) x86_64-gnu-debug: IMAGE: x86_64-gnu-debug x86_64-gnu-nopt: diff --git a/.azure-pipelines/master.yml b/.azure-pipelines/master.yml index 3f3025ad65b..e2baa923d99 100644 --- a/.azure-pipelines/master.yml +++ b/.azure-pipelines/master.yml @@ -6,6 +6,9 @@ pr: none trigger: - master +variables: +- group: prod-credentials + pool: vmImage: ubuntu-16.04 @@ -16,9 +19,7 @@ steps: - script: | export MESSAGE_FILE=$(mktemp -t msg.XXXXXX) . src/ci/docker/x86_64-gnu-tools/repo.sh - # FIXME(pietro): committing is disabled until we switch to Azure Pipelines - # as the source of truth, or until we setup a separate test repo. - #commit_toolstate_change "$MESSAGE_FILE" "$BUILD_SOURCESDIRECTORY/src/tools/publish_toolstate.py" "$(git rev-parse HEAD)" "$(git log --format=%s -n1 HEAD)" "$MESSAGE_FILE" "$TOOLSTATE_REPO_ACCESS_TOKEN" + commit_toolstate_change "$MESSAGE_FILE" "$BUILD_SOURCESDIRECTORY/src/tools/publish_toolstate.py" "$(git rev-parse HEAD)" "$(git log --format=%s -n1 HEAD)" "$MESSAGE_FILE" "$TOOLSTATE_REPO_ACCESS_TOKEN" displayName: Publish toolstate env: - TOOLSTATE_REPO_ACCESS_TOKEN: $(TOOLSTATE_REPO_ACCESS_TOKEN_SECRET) + TOOLSTATE_REPO_ACCESS_TOKEN: $(TOOLSTATE_REPO_ACCESS_TOKEN) diff --git a/.azure-pipelines/pr.yml b/.azure-pipelines/pr.yml index 84c9454fee5..88b5067b4a3 100644 --- a/.azure-pipelines/pr.yml +++ b/.azure-pipelines/pr.yml @@ -4,10 +4,11 @@ trigger: none pr: -- master # FIXME: really just want any branch, but want an explicit "pr" property set so it's clear +- master jobs: - job: Linux + timeoutInMinutes: 600 pool: vmImage: ubuntu-16.04 steps: @@ -15,8 +16,18 @@ jobs: strategy: matrix: x86_64-gnu-llvm-6.0: - RUST_BACKTRACE: 1 + IMAGE: x86_64-gnu-llvm-6.0 + mingw-check: + IMAGE: mingw-check -# x86_64-gnu-tools: {} -# # if: branch = auto OR (type = pull_request AND commit_message =~ /(?i:^update.*\b(rls|rustfmt|clippy|miri|cargo)\b)/) -# mingw-check: {} +# TODO: enable this job if the commit message matches this regex, need tools +# figure out how to get the current commit message on azure and stick it in a +# condition somewhere +# if: commit_message =~ /(?i:^update.*\b(rls|rustfmt|clippy|miri|cargo)\b)/ +# - job: Linux-x86_64-gnu-tools +# pool: +# vmImage: ubuntu-16.04 +# steps: +# - template: steps/run.yml +# variables: +# IMAGE: x86_64-gnu-tools diff --git a/.azure-pipelines/steps/run.yml b/.azure-pipelines/steps/run.yml index 14372d47df8..3f98aa49529 100644 --- a/.azure-pipelines/steps/run.yml +++ b/.azure-pipelines/steps/run.yml @@ -124,6 +124,7 @@ steps: CI: true SRC: . AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY) + TOOLSTATE_REPO_ACCESS_TOKEN: $(TOOLSTATE_REPO_ACCESS_TOKEN) displayName: Run build # If we're a deploy builder, use the `aws` command to publish everything to our diff --git a/src/ci/docker/run.sh b/src/ci/docker/run.sh index c9642dbf60c..e6cd794887c 100755 --- a/src/ci/docker/run.sh +++ b/src/ci/docker/run.sh @@ -149,6 +149,7 @@ exec docker \ --env TF_BUILD \ --env BUILD_SOURCEBRANCHNAME \ --env TOOLSTATE_REPO_ACCESS_TOKEN \ + --env TOOLSTATE_REPO \ --env CI_JOB_NAME="${CI_JOB_NAME-$IMAGE}" \ --volume "$HOME/.cargo:/cargo" \ --volume "$HOME/rustsrc:$HOME/rustsrc" \ diff --git a/src/ci/docker/x86_64-gnu-tools/repo.sh b/src/ci/docker/x86_64-gnu-tools/repo.sh index 6364bc2aabf..741d4dcbd9a 100644 --- a/src/ci/docker/x86_64-gnu-tools/repo.sh +++ b/src/ci/docker/x86_64-gnu-tools/repo.sh @@ -55,7 +55,7 @@ commit_toolstate_change() { git config --global credential.helper store printf 'https://%s:x-oauth-basic@github.com\n' "$TOOLSTATE_REPO_ACCESS_TOKEN" \ > "$HOME/.git-credentials" - git clone --depth=1 https://github.com/rust-lang-nursery/rust-toolstate.git + git clone --depth=1 $TOOLSTATE_REPO cd rust-toolstate FAILURE=1 diff --git a/src/tools/publish_toolstate.py b/src/tools/publish_toolstate.py index 7d359fdcaca..a777279bd16 100755 --- a/src/tools/publish_toolstate.py +++ b/src/tools/publish_toolstate.py @@ -3,6 +3,7 @@ import sys import re +import os import json import datetime import collections @@ -53,6 +54,14 @@ def read_current_status(current_commit, path): return json.loads(status) return {} +def gh_url(): + return os.environ['TOOLSTATE_ISSUES_API_URL'] + +def maybe_delink(message): + if os.environ.get('TOOLSTATE_SKIP_MENTIONS') is not None: + return message.replace("@", "") + return message + def issue( tool, maintainers, @@ -61,13 +70,12 @@ def issue( pr_reviewer, ): # Open an issue about the toolstate failure. - gh_url = 'https://api.github.com/repos/rust-lang/rust/issues' assignees = [x.strip() for x in maintainers.split('@') if x != ''] assignees.append(relevant_pr_user) response = urllib2.urlopen(urllib2.Request( - gh_url, + gh_url(), json.dumps({ - 'body': textwrap.dedent('''\ + 'body': maybe_delink(textwrap.dedent('''\ Hello, this is your friendly neighborhood mergebot. After merging PR {}, I observed that the tool {} no longer builds. A follow-up PR to the repository {} is needed to fix the fallout. @@ -77,7 +85,7 @@ def issue( cc @{}, the PR reviewer, and @rust-lang/compiler -- nominating for prioritization. - ''').format(relevant_pr_number, tool, REPOS.get(tool), relevant_pr_user, pr_reviewer), + ''').format(relevant_pr_number, tool, REPOS.get(tool), relevant_pr_user, pr_reviewer)), 'title': '`{}` no longer builds after {}'.format(tool, relevant_pr_number), 'assignees': assignees, 'labels': ['T-compiler', 'I-nominated'], @@ -216,11 +224,10 @@ if __name__ == '__main__': f.write(message) # Write the toolstate comment on the PR as well. - gh_url = 'https://api.github.com/repos/rust-lang/rust/issues/{}/comments' \ - .format(number) + issue_url = gh_url() + '/{}/comments'.format(number) response = urllib2.urlopen(urllib2.Request( - gh_url, - json.dumps({'body': message}), + issue_url, + json.dumps({'body': maybe_delink(message)}), { 'Authorization': 'token ' + github_token, 'Content-Type': 'application/json',