daml/ci/prs.yml
Moritz Kiefer 9e1e42d27c
Drop dependency on hosted nodes (#12901)
This should hopefully get CI working again.

There are two changes in here:

1. We can no longer change our patched Bazel. I didn’t switch away
   from the current patched version for now (we upload it to gcp bucket
   so it still works fine even if we cannot build it) but if we upgrade,
   we need to go to an unpatched version for now.
2. We need to get `az` from dev-env. I tested the self service compat
   job stuff and it works fine with this but there is a chance other
   parts don’t.

changelog_begin
changelog_end
2022-02-14 02:49:38 +01:00

199 lines
6.8 KiB
YAML

# Copyright (c) 2022 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
trigger: none
pr:
autoCancel: true # cancel previous builds on push
branches:
include:
- main
- release/*
jobs:
- template: build.yml
- template: check-for-release-job.yml
- job: check_standard_change_label
dependsOn:
- git_sha
variables:
fork_sha: $[ dependencies.git_sha.outputs['out.fork_point'] ]
branch_sha: $[ dependencies.git_sha.outputs['out.branch'] ]
condition: eq(variables['Build.Reason'], 'PullRequest')
pool:
name: 'ubuntu_20_04'
demands: assignment -equals default
steps:
- checkout: self
- bash: |
set -euo pipefail
has_changed () {
git diff $(fork_sha) $(branch_sha) --name-only | grep -q "^$1"
}
fail_if_missing_std_change_label () {
curl https://api.github.com/repos/digital-asset/daml/pulls/$PR -s | jq -r '.labels[].name' | grep -q '^Standard-Change$'
}
if has_changed "infra/" || has_changed "LATEST"; then
fail_if_missing_std_change_label
fi
env:
PR: $(System.PullRequest.PullRequestNumber)
- job: check_changelog_entry
dependsOn:
- git_sha
variables:
fork_sha: $[ dependencies.git_sha.outputs['out.fork_point'] ]
branch_sha: $[ dependencies.git_sha.outputs['out.branch'] ]
pr.num: $[ variables['System.PullRequest.PullRequestNumber'] ]
condition: eq(variables['Build.Reason'], 'PullRequest')
pool:
name: 'ubuntu_20_04'
demands: assignment -equals default
steps:
- checkout: self
- template: bash-lib.yml
parameters:
var_name: bash-lib
- bash: |
set -euo pipefail
source $(bash-lib)
git checkout $(branch_sha)
if ci/check-changelog.sh $(fork_sha); then
exit 0
else
user=$(user_slack_handle $(branch_sha))
if [ "$user" != "" ]; then
tell_slack "<@${user}> <https://dev.azure.com/digitalasset/daml/_build/results?buildId=$(Build.BuildId)|Build $(Build.BuildId)> for <https://github.com/digital-asset/daml/pull/$(pr.num)|PR $(pr.num)> is missing a changelog entry." \
"$(Slack.team-daml-ci)"
fi
exit 1
fi
- job: compatiblity_target_protobuf
pool:
name: ubuntu_20_04
demands: assignment -equals default
steps:
- checkout: self
- bash: ci/check-protobuf-stability.sh --target
# required for collect_build_data
- job: release
condition: false
- job: notify_release_pr
condition: and(not(canceled()),
or(startsWith(variables['Build.SourceBranchName'], 'auto-release-pr-'),
startsWith(variables['System.PullRequest.SourceBranch'], 'auto-release-pr-')),
eq(dependencies.check_for_release.outputs['out.is_release'], 'true'))
dependsOn:
- git_sha
- collect_build_data
- check_for_release
- platform_independence_test
pool:
name: 'ubuntu_20_04'
demands: assignment -equals default
variables:
branch_sha: $[ dependencies.git_sha.outputs['out.branch'] ]
status: $[ dependencies.collect_build_data.result ]
is_release: $[ dependencies.check_for_release.outputs['out.is_release'] ]
steps:
- checkout: self
persistCredentials: true
- template: bash-lib.yml
parameters:
var_name: bash-lib
- bash: |
set -euo pipefail
source $(bash-lib)
AUTH="$(get_gh_auth_header)"
PR=$(curl -H "$AUTH" \
-H "Accept: application/vnd.github.groot-preview+json" \
-s -f \
"https://api.github.com/repos/digital-asset/daml/commits/$(git rev-parse HEAD)/pulls" \
| jq '.[0].number' \
|| echo "")
# Note: if we somehow fail to resolve the PR number from the GitHub
# API, there is still value in getting the notification on Slack, as
# we do have the build number and from there we can click through to
# the PR. Hence the `|| echo ""`.
PR_HANDLER=$(next_in_rotation_slack)
case "$(status)" in
Succeeded*)
msg="has succeeded! Next step is to approve & merge. This is probably a good time to start your Windows testing machine."
;;
Failed*)
msg="has failed. Please investigate."
;;
*)
# Should not be reached, but who knows?
msg="has completed with status $(status). See <https://github.com/digital-asset/daml/blob/main/release/RELEASE.md|RELEASE.md> for what to do next."
;;
esac
tell_slack "<@${PR_HANDLER}> <https://dev.azure.com/digitalasset/daml/_build/results?buildId=$(Build.BuildId)|Build $(Build.BuildId)> for release PR <https://github.com/digital-asset/daml/pull/${PR}|#${PR}> $msg"
- job: notify_user
# No Slack tokens on forks
condition: and(eq(variables['Build.Reason'], 'PullRequest'),
not(canceled()),
eq(variables['System.PullRequest.IsFork'], 'False'))
dependsOn:
- git_sha
- collect_build_data
- check_for_release
- check_changelog_entry
pool:
name: 'ubuntu_20_04'
demands: assignment -equals default
variables:
pr.num: $[ variables['System.PullRequest.PullRequestNumber'] ]
branch_sha: $[ dependencies.git_sha.outputs['out.branch'] ]
build_status: $[ dependencies.collect_build_data.result ]
changelog_status: $[ dependencies.check_changelog_entry.result ]
steps:
- template: bash-lib.yml
parameters:
var_name: bash-lib
- bash: |
set -euo pipefail
source $(bash-lib)
user=$(user_slack_handle $(branch_sha))
if [ "$user" != "" ]; then
tell_slack "<@${user}> <https://dev.azure.com/digitalasset/daml/_build/results?buildId=$(Build.BuildId)|Build $(Build.BuildId)> for <https://github.com/digital-asset/daml/pull/$(pr.num)|PR $(pr.num)> has completed with status $(build_status) (changelog: $(changelog_status))." \
"$(Slack.team-daml-ci)"
fi
- job: self_service_compat_test
pool:
name: 'ubuntu_20_04'
demands: assignment -equals default
condition: eq(variables['Build.Reason'], 'PullRequest')
steps:
- checkout: self
- template: bash-lib.yml
parameters:
var_name: bash-lib
- bash: |
set -euo pipefail
eval "$(./dev-env/bin/dade-assist)"
source $(bash-lib)
COMMIT=$(git rev-parse HEAD^2)
REQUEST=$(git log -n1 --format="%(trailers:key=run-full-compat,valueonly)" $COMMIT)
if [ $REQUEST == true ]; then
# Unfortunately recovering the actual branch name is tricky
trigger_azure $AZURE_TOKEN digital-asset.daml-daily-compat --commit-id $COMMIT --branch not-main
fi
env:
AZURE_TOKEN: $(System.AccessToken)