mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-19 16:57:40 +03:00
60b300199b
This does not get used very often so it is likely nobody will remember how it works when we do use it. It's And due to the ordering Azure makes of jobs in its UI, it's very easy to miss that there is a final, Linux-based step and the values are actually printed there. So this adds a little note to remind us of that. Note that as this changes the `ci/patch_bazel_windows` folder, this will also generate a new Bazel, so this PR will also update the Scoop reference. CHANGELOG_BEGIN CHANGELOG_END
121 lines
4.5 KiB
YAML
121 lines
4.5 KiB
YAML
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||
# SPDX-License-Identifier: Apache-2.0
|
||
|
||
parameters:
|
||
- name: final_job_name
|
||
|
||
jobs:
|
||
|
||
- job: patch_bazel_pre_check
|
||
pool:
|
||
name: linux-pool
|
||
steps:
|
||
- checkout: self
|
||
- bash: |
|
||
set -euo pipefail
|
||
|
||
CACHE_KEY="$(find ci/patch_bazel_windows -type f -print0 | sort -z | xargs -r0 md5sum | md5sum | awk '{print $1}')"
|
||
TARGET="patch_bazel_windows/bazel-$CACHE_KEY.zip"
|
||
TARGET_URL="https://daml-binaries.da-ext.net/$TARGET"
|
||
STATUS="$(curl -Is "$TARGET_URL" | head -1 | awk '{print $2}')"
|
||
|
||
if [ "200" = "$STATUS" ]; then
|
||
SHOULD_RUN=false
|
||
else
|
||
SHOULD_RUN=true
|
||
fi
|
||
setvar() {
|
||
echo "$1: $2"
|
||
echo "##vso[task.setvariable variable=$1;isOutput=true]$2"
|
||
}
|
||
setvar cache_key $CACHE_KEY
|
||
setvar should_run $SHOULD_RUN
|
||
setvar target $TARGET
|
||
setvar target_url $TARGET_URL
|
||
|
||
echo "Final hash and URL will be printed by the ${{parameters.final_job_name}} job."
|
||
name: out
|
||
|
||
- job: patch_bazel_compile
|
||
dependsOn:
|
||
- patch_bazel_pre_check
|
||
variables:
|
||
cache_key: $[ dependencies.patch_bazel_pre_check.outputs['out.cache_key'] ]
|
||
should_run: $[ dependencies.patch_bazel_pre_check.outputs['out.should_run'] ]
|
||
bazel_base_version: 3.3.1
|
||
pool:
|
||
vmImage: windows-2019
|
||
steps:
|
||
- checkout: self
|
||
condition: eq(variables.should_run, 'true')
|
||
- bash: |
|
||
git clone https://github.com/bazelbuild/bazel.git
|
||
cd bazel
|
||
git checkout $(bazel_base_version)
|
||
git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn < ../ci/patch_bazel_windows/patch-bazel
|
||
condition: eq(variables.should_run, 'true')
|
||
- powershell: |
|
||
choco install msys2 --noprogress --yes
|
||
choco install zip --noprogress --yes
|
||
condition: eq(variables.should_run, 'true')
|
||
- powershell: |
|
||
C:\tools\msys64\usr\bin\pacman -S zip --noconfirm
|
||
condition: eq(variables.should_run, 'true')
|
||
- bash: |
|
||
set -euo pipefail
|
||
cd bazel
|
||
bazel build src/main/cpp:client src:package-zip_jdk_minimal -c opt --stamp --embed_label $(bazel_base_version)-patched-$(cache_key)
|
||
# Note (MK) For some reason, the `zip` from chocolatey seems to result in
|
||
# a “zip file structure invalid” error. I’ve tried adding msys to PATH so the Bazel
|
||
# rules pick up `zip` from msys but that broke other things. So for now
|
||
# we skip the final Bazel rule to build the self-extracting exe and instead
|
||
# call `zip` from msys separately.
|
||
/c/tools/msys64/msys2_shell.cmd -defterm -no-start -here -c "cat bazel-bin/src/main/cpp/client.exe bazel-bin/src/package_jdk_minimal.zip > bazel.exe && zip -A bazel.exe"
|
||
mkdir '$(Build.StagingDirectory)\patched-bazel'
|
||
zip bazel.zip bazel.exe
|
||
cp bazel.zip '$(Build.StagingDirectory)\patched-bazel'
|
||
echo "Final hash and URL will be printed by the ${{parameters.final_job_name}} job."
|
||
condition: eq(variables.should_run, 'true')
|
||
- task: PublishPipelineArtifact@1
|
||
inputs:
|
||
targetPath: $(Build.StagingDirectory)/patched-bazel
|
||
artifactName: patched-bazel
|
||
condition: eq(variables.should_run, 'true')
|
||
|
||
- job: ${{ parameters.final_job_name }}
|
||
dependsOn:
|
||
- patch_bazel_compile
|
||
- patch_bazel_pre_check
|
||
variables:
|
||
cache_key: $[ dependencies.patch_bazel_pre_check.outputs['out.cache_key'] ]
|
||
target: $[ dependencies.patch_bazel_pre_check.outputs['out.target'] ]
|
||
target_url: $[ dependencies.patch_bazel_pre_check.outputs['out.target_url'] ]
|
||
should_run: $[ dependencies.patch_bazel_pre_check.outputs['out.should_run'] ]
|
||
pool:
|
||
name: linux-pool
|
||
steps:
|
||
- task: DownloadPipelineArtifact@2
|
||
inputs:
|
||
artifact: patched-bazel
|
||
path: $(Build.StagingDirectory)/patched-bazel
|
||
condition: eq(variables.should_run, 'true')
|
||
- bash: |
|
||
set -euo pipefail
|
||
|
||
SOURCE='$(Build.StagingDirectory)/patched-bazel/bazel.zip'
|
||
|
||
GCS_KEY=$(mktemp)
|
||
cleanup() {
|
||
rm -rf $GCS_KEY
|
||
}
|
||
trap cleanup EXIT
|
||
# This will break on external PRs.
|
||
echo "$GOOGLE_APPLICATION_CREDENTIALS_CONTENT" > $GCS_KEY
|
||
gcloud auth activate-service-account --key-file=$GCS_KEY
|
||
BOTO_CONFIG=/dev/null gsutil cp "$SOURCE" "gs://daml-binaries/$(target)"
|
||
echo "url: $(target_url)"
|
||
echo "hash: $(sha256sum "$(Build.StagingDirectory)/patched-bazel/bazel.zip" | awk '{print $1}')"
|
||
env:
|
||
GOOGLE_APPLICATION_CREDENTIALS_CONTENT: $(GOOGLE_APPLICATION_CREDENTIALS_CONTENT)
|
||
condition: eq(variables.should_run, 'true')
|