sonic-buildimage/.azure-pipelines/azure-pipelines-UpgrateVersion.yml
xumia ae0a47dc6e
[Build][202012] Support Debian snapshot mirror to improve build stability (#14558)
#### Why I did it
Cherry-pick commits from master to support the snapshot based mirror, and fix the code conflicts. And add the last commit to fix the build broken issue according to the mirror change.

ad162ae0e [Build] Optimize the version control for Debian packages (https://github.com/sonic-net/sonic-buildimage/pull/14557)
38c5d7fce [Build] Support j2 template for debian sources for docker ptf (https://github.com/sonic-net/sonic-buildimage/pull/13198)
5e4826ebf  [Ci] Support to use the same snapshot for all platform builds (#13913)
820692563 [Build] Change the default mirror version config file (#13786)
5e4a866e3 [Build] Support Debian snapshot mirror to improve build stability (#13097)
ac5d89c6a  [Build] Support j2 template for debian sources (#12557)
2023-04-20 22:45:33 -07:00

183 lines
6.4 KiB
YAML

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger: none
pr: none
schedules:
- cron: "0 0 * * *"
displayName: Daily Build
branches:
include:
- 202012
always: true
resources:
repositories:
- repository: buildimage
type: github
name: sonic-net/sonic-buildimage
ref: master
endpoint: sonic-net
pool: sonicbld
parameters:
- name: jobFilters
type: object
default:
- vs
- broadcom
- barefoot
- centec
- generic
- innovium
- mellanox
- nephos
- centec-arm64
- marvell-armhf
stages:
- stage: Prepare
jobs:
- job: Prepare
steps:
- script: |
DEFAULT_MIRROR_URL_PREFIX=http://packages.trafficmanager.net
DEBIAN_TIMESTAMP=$(curl $DEFAULT_MIRROR_URL_PREFIX/snapshot/debian/latest/timestamp)
DEBIAN_SECURITY_TIMESTAMP=$(curl $DEFAULT_MIRROR_URL_PREFIX/snapshot/debian-security/latest/timestamp)
echo "DEBIAN_TIMESTAMP=$DEBIAN_TIMESTAMP, DEBIAN_SECURITY_TIMESTAMP=$DEBIAN_SECURITY_TIMESTAMP"
echo "##vso[task.setvariable variable=DEBIAN_TIMESTAMP;isOutput=true]$DEBIAN_TIMESTAMP"
echo "##vso[task.setvariable variable=DEBIAN_SECURITY_TIMESTAMP;isOutput=true]$DEBIAN_SECURITY_TIMESTAMP"
name: SetVersions
displayName: 'Set snapshot versions'
- stage: Build
dependsOn: Prepare
variables:
- name: CACHE_MODE
value: none
- name: VERSION_CONTROL_OPTIONS
value: 'SONIC_VERSION_CONTROL_COMPONENTS='
- name: SKIP_CHECKOUT
value: true
- name: DEBIAN_TIMESTAMP
value: $[ stageDependencies.Prepare.Prepare.outputs['SetVersions.DEBIAN_TIMESTAMP'] ]
- name: DEBIAN_SECURITY_TIMESTAMP
value: $[ stageDependencies.Prepare.Prepare.outputs['SetVersions.DEBIAN_SECURITY_TIMESTAMP'] ]
- template: .azure-pipelines/template-variables.yml@buildimage
jobs:
- template: azure-pipelines-build.yml
parameters:
jobFilters: ${{ parameters.jobFilters }}
buildOptions: '${{ variables.VERSION_CONTROL_OPTIONS }} ENABLE_DOCKER_BASE_PULL=n SONIC_BUILD_JOBS=$(nproc) ENABLE_IMAGE_SIGNATURE=y'
preSteps:
- template: .azure-pipelines/template-clean-sonic-slave.yml@buildimage
- checkout: self
submodules: recursive
fetchDepth: 0
path: s
displayName: 'Checkout code'
- script: |
echo "DEBIAN_TIMESTAMP=$DEBIAN_TIMESTAMP, DEBIAN_SECURITY_TIMESTAMP=$DEBIAN_SECURITY_TIMESTAMP"
if [ "$MIRROR_SNAPSHOT" == y ]; then
mkdir -p target/versions/default/
echo "debian==$DEBIAN_TIMESTAMP" > target/versions/default/versions-mirror
echo "debian-security==$DEBIAN_SECURITY_TIMESTAMP" >> target/versions/default/versions-mirror
cat target/versions/default/versions-mirror
fi
displayName: 'Set snapshot versions'
- stage: UpgradeVersions
jobs:
- job: UpgradeVersions
pool:
vmImage: 'ubuntu-20.04'
steps:
- script: |
if [ -z "$(which gh)" ]; then
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0
sudo apt-add-repository https://cli.github.com/packages
sudo apt update
sudo apt install gh
fi
displayName: 'Install gh'
- checkout: self
displayName: 'Checkout code'
- download: current
patterns: '**/versions-*'
- script: |
# Cleanup the old versions
rm -rf files/build/versions
mkdir -p target
default_platform=broadcom
artifacts=$(find $(Pipeline.Workspace) -maxdepth 1 -type d -name 'sonic-buildimage.*' | grep -v "sonic-buildimage.${default_platform}")
echo "artifacts$artifacts"
cp -r $(Pipeline.Workspace)/sonic-buildimage.${default_platform}/target/versions target/
make freeze FREEZE_VERSION_OPTIONS=-r
find files/build/versions
ordered_artifacts=$(echo "$artifacts" | grep -v -E "arm64|armhf" && echo "$artifacts" | grep -E "arm64|armhf")
for artifact in $ordered_artifacts
do
rm -rf target/versions
cp -r $artifact/target/versions target/
OPTIONS="-a -d"
[[ "$artifact" == *arm64* || "$artifact" == *armhf* ]] && OPTIONS="-d"
make freeze FREEZE_VERSION_OPTIONS="$OPTIONS"
done
git diff files/build/versions
displayName: 'Freeze Versions'
- script: |
if [ -z "$GIT_USER" ]; then
echo "Skipped to send the pull request, GIT_USER not set."
exit 0
fi
GIT_STATUS=$(git status --porcelain files/build/versions)
if [ -z "$GIT_STATUS" ]; then
echo "Skipped to send the pull request, no version change in files/build/versions"
exit 0
fi
if [ ! -d "$HOME" ]; then
sudo mkdir -p $HOME
sudo chown -R $(id -un):$(id -gn) $HOME
fi
SOURCE_BRANCH=$(Build.SourceBranch)
REPO_NAME=$(Build.Repository.Name)
[ -z "$GIT_REPO" ] && GIT_REPO=${REPO_NAME#*/}
BRANCH_NAME=repd/versions/${SOURCE_BRANCH#refs/heads/}
echo '#!/bin/bash' > git_env_password.sh
echo 'echo $GIT_PASSWORD' >> git_env_password.sh
chmod a+x git_env_password.sh
export GIT_ASKPASS=./git_env_password.sh
git config user.name $GIT_USER
git config credential.https://github.com.username $GIT_USER
git add files/build/versions
git commit -m "[ci/build]: Upgrade SONiC package versions"
git checkout -b $BRANCH_NAME
git remote add remote https://github.com/$GIT_USER/$GIT_REPO
git push remote HEAD:refs/heads/$BRANCH_NAME -f
git branch -u remote/$BRANCH_NAME
echo $GIT_PASSWORD | gh auth login --with-token
TITLE="Upgrade SONiC Versions"
BODY="Upgrade SONiC Versions"
RET=0
if ! gh pr create -t "$TITLE" -b "$BODY" -B $(Build.SourceBranch) -R $(Build.Repository.Name) > pr.log 2>&1; then
if ! grep -q "already exists" pr.log; then
RET=1
fi
fi
cat pr.log
exit $RET
env:
GIT_USER: $(GIT_USER)
GIT_PASSWORD: $(GIT_PASSWORD)
displayName: 'Send Pull Request'
- publish: $(System.DefaultWorkingDirectory)/files/build/versions
artifact: 'sonic-buildimage.versions'
displayName: 'Archive SONiC versions'