@@ -36,6 +36,12 @@ parameters:
3636 displayName : ' Test PMC Connection without Publishing Artifacts to Linux Repos'
3737 type : boolean
3838 default : false
39+
40+ - name : remove_packages
41+ displayName : ' Remove Linux Packages'
42+ type : string
43+ default : ' '
44+
3945# Do not trigger this pipeline automatically
4046trigger : none
4147pr : none
@@ -543,7 +549,7 @@ extends:
543549 exit 1
544550 fi
545551 displayName: 'Copy signed mac binaries'
546- # SignArtifacts end here
552+ # SignArtifacts end here
547553
548554 - stage : VerifyArtifacts
549555 dependsOn : SignArtifacts
@@ -865,7 +871,7 @@ extends:
865871 m1_container_url="https://azcopyvnextrelease.blob.core.windows.net/%24web/azcopy-m1-drops/azcopy-$(azcopy_version)-$today"
866872 AZCOPY_AUTO_LOGIN_TYPE=AzCLI ./azcopy_bin cp "$(input)/azcopy-binaries-mac/azcopy_darwin_m1_arm64" "$m1_container_url" --recursive --put-md5=true
867873 fi
868- # UploadToStorage ends here
874+ # UploadToStorage end here
869875 - ${{ if eq(parameters.publish_docker_image, true) }} :
870876 - stage : BuildAndPublishDockerImage
871877 dependsOn :
@@ -923,7 +929,7 @@ extends:
923929 inputs :
924930 image : azcopycontainers.azurecr.io/azure-azcopy-mariner-x86_64.$(azcopy_docker_version):latest
925931 remoteImage : azcopycontainers.azurecr.io/azure-azcopy-mariner-x86_64.$(azcopy_docker_version):latest
926-
932+
927933 - job : LinuxARM64
928934 pool :
929935 name : azcopy-arm-pool
@@ -984,7 +990,10 @@ extends:
984990 - AzCopyVersion
985991 - VerifyArtifacts
986992 jobs :
987- - job : Job
993+ - job : ReleaseJob
994+ templateContext :
995+ type : releaseJob
996+ isProduction : true
988997 pool :
989998 name : azcopy-pool
990999 image : ubuntu22-1espt
@@ -1002,11 +1011,23 @@ extends:
10021011 echo "##vso[task.setvariable variable=azcopy_github_tag]$azcopy_github_tag"
10031012 displayName: 'AzCopy Tag Name'
10041013
1005- - task : DownloadPipelineArtifact@2
1006- displayName : ' Download Linux, Windows, Mac Build Artifacts'
1014+ - task : 1ES. DownloadPipelineArtifact@1
1015+ displayName : ' Download Windows Build Artifacts'
10071016 inputs :
1008- itemPattern : ' azcopy-*-signed/**'
1009- downloadPath : $(Build.ArtifactStagingDirectory)
1017+ artifactName : ' azcopy-windows-signed'
1018+ targetPath : $(Build.ArtifactStagingDirectory)/signed
1019+
1020+ - task : 1ES.DownloadPipelineArtifact@1
1021+ displayName : ' Download Linux Build Artifacts'
1022+ inputs :
1023+ artifactName : ' azcopy-linux-signed'
1024+ targetPath : $(Build.ArtifactStagingDirectory)/signed
1025+
1026+ - task : 1ES.DownloadPipelineArtifact@1
1027+ displayName : ' Download Mac Build Artifacts'
1028+ inputs :
1029+ artifactName : ' azcopy-mac-signed'
1030+ targetPath : $(Build.ArtifactStagingDirectory)/signed
10101031
10111032 - script : |
10121033 sudo ls -lRt $(Build.ArtifactStagingDirectory)
@@ -1107,10 +1128,10 @@ extends:
11071128 amd64file=$(ls "$(signed)/mariner/azcopy"*.x86_64.rpm)
11081129 marinerArmFileName="${arm64file/.arm64.rpm/-cm2.arm64.rpm}"
11091130 marinerAmdFileName="${amd64file/.x86_64.rpm/-cm2.x86_64.rpm}"
1110-
1131+
11111132 mv -v "$(signed)/mariner/azcopy"*.arm64.rpm "$marinerArmFileName"
11121133 mv -v "$(signed)/mariner/azcopy"*.x86_64.rpm "$marinerAmdFileName"
1113-
1134+
11141135 mv "$(signed)/mariner/azcopy"*.rpm "$(signed)/"
11151136 rm -r "$(signed)/mariner/"
11161137 displayName: 'Rename Mariner binaries'
@@ -1150,37 +1171,37 @@ extends:
11501171 inlineScript : |
11511172 azcopyAmdDeb=`pmc --auth-type wif --base-url "https://pmc-ingest.trafficmanager.net/api/v4" --id-only package upload azcopy*.x86_64.deb`
11521173 echo "Azcopy AMD DEB ID: $azcopyAmdDeb"
1153-
1174+
11541175 azcopyAmdRpmFile=$(ls azcopy-* | grep -vE 'cm2\.x86_64\.rpm|arm64\.deb|x86_64\.deb|arm64\.rpm')
11551176 azcopyAmdRpm=$(pmc --auth-type wif --base-url "https://pmc-ingest.trafficmanager.net/api/v4" --id-only package upload $azcopyAmdRpmFile)
11561177 echo "Azcopy AMD RPM ID: $azcopyAmdRpm"
1157-
1178+
11581179 azcopyArmDeb=`pmc --auth-type wif --base-url "https://pmc-ingest.trafficmanager.net/api/v4" --id-only package upload azcopy*.arm64.deb`
11591180 echo "Azcopy ARM DEB ID: $azcopyArmDeb"
1160-
1181+
11611182 azcopyArmRpmFile=$(ls azcopy* | grep -vE 'cm2\.arm64\.rpm|arm64\.deb|x86_64\.deb|x86_64\.rpm')
11621183 azcopyArmRpm=$(pmc --auth-type wif --base-url "https://pmc-ingest.trafficmanager.net/api/v4" --id-only package upload $azcopyArmRpmFile)
11631184 echo "Azcopy ARM RPM $azcopyArmRpmFile"
11641185 echo "Azcopy ARM RPM ID: $azcopyArmRpm"
1165-
1186+
11661187 # Find the Mariner RPM file and upload
11671188 marinerAmdRpmFile=$(ls azcopy-* | grep 'cm2\.x86_64\.rpm')
11681189 marinerAmdRpm=$(pmc --auth-type wif --base-url "https://pmc-ingest.trafficmanager.net/api/v4" --id-only package upload $marinerAmdRpmFile)
11691190 echo "Azcopy mariner AMD RPM $marinerAmdRpmFile"
11701191 echo "Azcopy mariner AMD RPM ID: $marinerAmdRpm"
1171-
1192+
11721193 marinerAarchRpmFile=$(ls azcopy-* | grep 'cm2\.arm64\.rpm')
11731194 marinerAarchRpm=$(pmc --auth-type wif --base-url "https://pmc-ingest.trafficmanager.net/api/v4" --id-only package upload $marinerAarchRpmFile)
11741195 echo "Azcopy mariner ARM RPM: $marinerAarchRpmFile"
11751196 echo "Azcopy mariner ARM RPM ID: $marinerAarchRpm"
1176-
1197+
11771198 is_preview="false"
11781199 echo "##vso[task.setvariable variable=is_preview]$is_preview"
11791200 if [[ $marinerAmdRpmFile == *"preview"* ]]; then
11801201 is_preview="true"
11811202 echo "##vso[task.setvariable variable=is_preview]$is_preview"
11821203 fi
1183-
1204+
11841205 while IFS=, read -r distro archetype repoName releaseName; do
11851206 # If the package is preview, publish to mariner preview package
11861207 if [[ $distro == *"Mariner-"* ]]; then
@@ -1215,4 +1236,99 @@ extends:
12151236 echo "Repo Name: $repoName"
12161237 pmc --auth-type wif --base-url "https://pmc-ingest.trafficmanager.net/api/v4" repo publish $repoName
12171238 fi
1218- done < <(tail -n +3 ../packages.csv)
1239+ done < <(tail -n +3 ../packages.csv)
1240+
1241+ - ${{ if ne(parameters.remove_packages, '') }} :
1242+ - stage : RemovePackagesFromLinuxRepository
1243+ jobs :
1244+ - job : RemovePackages
1245+ timeoutInMinutes : 120
1246+ pool :
1247+ name : azcopy-pool
1248+ image : ubuntu22-1espt
1249+ os : linux
1250+ variables :
1251+ - group : AZCOPY_SECRET_VAULT
1252+ steps :
1253+ - checkout : none
1254+
1255+ - task : PipAuthenticate@1
1256+ inputs :
1257+ artifactFeeds : ' DevExGlobalFeed'
1258+ displayName : ' Connect to PMC artifact'
1259+
1260+ - script : |
1261+ sudo apt-get clean
1262+ sudo apt-get update --fix-missing
1263+ sudo apt-get install -y tree
1264+ displayName: 'Install Dependencies'
1265+
1266+ - script : |
1267+ pip install pmc-cli
1268+ echo '##vso[task.prependpath]$(HOME)/.local/bin'
1269+ displayName: 'Install pmc-cli'
1270+
1271+ - task : DownloadSecureFile@1
1272+ name : pmcCertificate
1273+ displayName : ' Download pmc pem file'
1274+ inputs :
1275+ secureFile : ' azstorage-devex-kv-blobfuse-release-pmc1-10102025.pem'
1276+
1277+ - task : DownloadSecureFile@1
1278+ name : settings
1279+ displayName : ' Download settings.toml file'
1280+ inputs :
1281+ secureFile : ' settings.toml'
1282+
1283+ - task : AzureCLI@2
1284+ displayName : ' Test PMC installation'
1285+ inputs :
1286+ addSpnToEnvironment : true
1287+ azureSubscription : ' azcopy-release'
1288+ scriptType : bash
1289+ scriptLocation : inlineScript
1290+ inlineScript : |
1291+ pmc --version
1292+ pmc --auth-type wif --base-url "https://pmc-ingest.trafficmanager.net/api/v4" repo list --limit 1
1293+ if [ $? -ne 0 ]; then
1294+ exit 1
1295+ fi
1296+
1297+ - script : |
1298+ # Validate remove_packages param
1299+ if [[ "${{parameters.remove_packages}}" != " " ]] && [[ -n "${{parameters.remove_packages}}" ]]; then
1300+ if ! [[ "${{parameters.remove_packages}}" =~ ^[a-zA-Z0-9._~-]+$ ]]; then
1301+ echo "Error: remove_packages param contains invalid chars. Double check its value."
1302+ exit 1
1303+ fi
1304+ fi
1305+ pkg_id_list=$(pmc --msal-cert-path $(pmcCertificate.secureFilePath) --config $(settings.secureFilePath) package deb list --name azcopy --version ${{parameters.remove_packages}})
1306+
1307+ # Loop over all the results and extract the package id for each one
1308+ for PKG_ID in $(echo "$pkg_id_list" | jq -r '.results[].id'); do
1309+ echo "Processing Package ID: $PKG_ID" # Debugging line
1310+ pkg_repo_names=$(pmc --msal-cert-path $(pmcCertificate.secureFilePath) --config $(settings.secureFilePath) repo list --package "$PKG_ID")
1311+
1312+ for REPO_NAME in $(echo "$pkg_repo_names" | jq -r '.results[].name'); do
1313+ echo "Found repo: $REPO_NAME $PKG_ID" # Debugging line
1314+ pmc --msal-cert-path $(pmcCertificate.secureFilePath) --config $(settings.secureFilePath) repo package update --remove-packages $PKG_ID $REPO_NAME
1315+ pmc --msal-cert-path $(pmcCertificate.secureFilePath) --config $(settings.secureFilePath) repo publish $REPO_NAME
1316+ done
1317+ done
1318+ displayName: 'Remove deb packages from the repository'
1319+
1320+ - script : |
1321+ pkg_id_list=$(pmc --msal-cert-path $(pmcCertificate.secureFilePath) --config $(settings.secureFilePath) package rpm list --name azcopy --version ${{parameters.remove_packages}})
1322+
1323+ # Loop over all the results and extract the package id for each one
1324+ for PKG_ID in $(echo "$pkg_id_list" | jq -r '.results[].id'); do
1325+ echo "Processing Package ID: $PKG_ID" # Debugging line
1326+ pkg_repo_names=$(pmc --msal-cert-path $(pmcCertificate.secureFilePath) --config $(settings.secureFilePath) repo list --package "$PKG_ID")
1327+
1328+ for REPO_NAME in $(echo "$pkg_repo_names" | jq -r '.results[].name'); do
1329+ echo "Found repo: $REPO_NAME $PKG_ID" # Debugging line
1330+ pmc --msal-cert-path $(pmcCertificate.secureFilePath) --config $(settings.secureFilePath) repo package update --remove-packages $PKG_ID $REPO_NAME
1331+ pmc --msal-cert-path $(pmcCertificate.secureFilePath) --config $(settings.secureFilePath) repo publish $REPO_NAME
1332+ done
1333+ done
1334+ displayName: 'Remove rpm packages from the repository'
0 commit comments