Skip to content

Commit cd2eea8

Browse files
committed
Merge 3.0-dev to 3.0
2 parents 0f0a7df + 71a14dd commit cd2eea8

302 files changed

Lines changed: 653830 additions & 3817 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/check-circular-deps.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ jobs:
2222
- name: Check for circular dependencies
2323
run: |
2424
echo "Checking for circular dependency loops..."
25-
# Call this script to sync the toolchain manifests with the LKG daily build.
26-
./toolkit/scripts/setuplkgtoolchain.sh
27-
# Determine the LKG daily build ID.
28-
LKG_BUILD_ID=$(wget -qO - https://mariner3dailydevrepo.blob.core.windows.net/lkg/lkg-3.0-dev.json | jq -r ".dailybuildid" | tr '\.' '-')
2925
# Setup the toolchain using the LKG daily build, and then make the full package graph.
3026
# This will fail if any circular dependency loops are detected in the core SPECs.
31-
sudo make -C toolkit -j$(nproc) graph REBUILD_TOOLS=y DAILY_BUILD_ID=${LKG_BUILD_ID}
27+
sudo make -C toolkit graph REBUILD_TOOLS=y DAILY_BUILD_ID=lkg -j30
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
ARG BASE_IMAGE \
2+
\
3+
FROM $BASE_IMAGE \
4+
\
5+
ARG CORE_RPMS_TO_INSTALL \
6+
ARG NVIDIA_RPMS_TO_INSTALL \
7+
\
8+
RUN --mount=type=bind,source=./Stage/,target=/dockerStage/ \\\
9+
RPMS_PATH="/dockerStage/RPMS"; \\\
10+
LOCAL_REPO_PATH="/localrepo"; \\\
11+
NVIDIA_RPM_DOWNLOAD_PATH="/opt/nvidia"; \\\
12+
mkdir -p $LOCAL_REPO_PATH; \\\
13+
mkdir -p $NVIDIA_RPM_DOWNLOAD_PATH; \\\
14+
tdnf install -y createrepo; \\\
15+
cp -r ${RPMS_PATH} ${LOCAL_REPO_PATH}; \\\
16+
cat /dockerStage/azurelinuxlocal.repo >> /etc/yum.repos.d/local.repo; \\\
17+
createrepo --compatibility --database ${LOCAL_REPO_PATH} --workers 10; tdnf makecache; \\\
18+
tdnf autoremove -y createrepo; \\\
19+
for rpm in "${CORE_RPMS_TO_INSTALL[@]}"; do \\\
20+
echo "RPM: $rpm"; \\\
21+
tdnf install -y $rpm; \\\
22+
done; \\\
23+
for rpm in "${NVIDIA_RPMS_TO_INSTALL[@]}"; do \\\
24+
echo "RPM: $rpm"; \\\
25+
tdnf -y --downloadonly --downloaddir=$NVIDIA_RPM_DOWNLOAD_PATH install $rpm; \\\
26+
done; \\\
27+
tdnf clean all; \\\
28+
rm -f /etc/yum.repos.d/local.repo; \\\
29+
rm -rf /var/cache/tdnf; \\\
30+
rm -rf ${LOCAL_REPO_PATH};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
util-linux
2+
ca-certificates
3+
kernel
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cuda
2+
nvidia-fabric-manager
3+
libnvidia-nscq
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#!/bin/bash
2+
# Copyright (c) Microsoft Corporation.
3+
# Licensed under the MIT License.
4+
5+
set -e
6+
7+
function initialization {
8+
echo "+++ Initialization"
9+
if [ "$PUBLISHING_LEVEL" = "preview" ]; then
10+
CONTAINER_IMAGE_NAME=${ACR}.azurecr.io/${REPO_PREFIX}/${REPOSITORY}
11+
elif [ "$PUBLISHING_LEVEL" = "development" ]; then
12+
CONTAINER_IMAGE_NAME=${ACR}.azurecr.io/${REPOSITORY}
13+
fi
14+
15+
BASE_IMAGE_NAME=${BASE_IMAGE_NAME_FULL%:*} # # mcr.microsoft.com/azurelinux/base/core
16+
BASE_IMAGE_TAG=${BASE_IMAGE_NAME_FULL#*:} # 3.0
17+
AZURE_LINUX_VERSION=${BASE_IMAGE_TAG%.*} # 3.0
18+
DISTRO_IDENTIFIER="azl"
19+
END_OF_LIFE_1_YEAR=$(date -d "+1 year" "+%Y-%m-%dT%H:%M:%SZ")
20+
21+
echo "Container Image Name -> $CONTAINER_IMAGE_NAME"
22+
echo "Base ACR Container Name -> $BASE_IMAGE_NAME"
23+
echo "Base ACR Container Tag -> $BASE_IMAGE_TAG"
24+
echo "Azure Linux Version -> $AZURE_LINUX_VERSION"
25+
echo "Distro Identifier -> $DISTRO_IDENTIFIER"
26+
echo "End of Life -> $END_OF_LIFE_1_YEAR"
27+
}
28+
29+
function finalize {
30+
echo "+++ Finalize"
31+
docker image tag "$CONTAINER_IMAGE_NAME" "$CONTAINER_IMAGE_NAME_FINAL"
32+
docker rmi -f "$CONTAINER_IMAGE_NAME"
33+
echo "+++ Save container image name to file PublishedContainers-$IMAGE.txt"
34+
echo "$CONTAINER_IMAGE_NAME_FINAL" >> "$OUTPUT_DIR/PublishedContainers-$IMAGE.txt"
35+
36+
# Publish the image to ACR
37+
publish_to_acr
38+
39+
# Generate SBOM
40+
generate_image_sbom
41+
}
42+
43+
function oras_attach {
44+
local image_name=$1
45+
oras attach \
46+
--artifact-type "application/vnd.microsoft.artifact.lifecycle" \
47+
--annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$END_OF_LIFE_1_YEAR" \
48+
"$image_name"
49+
}
50+
51+
function publish_to_acr {
52+
if [[ ! "$PUBLISH_TO_ACR" =~ [Tt]rue ]]; then
53+
echo "+++ Skip publishing to ACR"
54+
return
55+
fi
56+
local oras_access_token
57+
58+
echo "+++ az login into Azure ACR $ACR"
59+
oras_access_token=$(az acr login --name "$ACR" --expose-token --output tsv --query accessToken)
60+
oras login "$ACR.azurecr.io" \
61+
--username "00000000-0000-0000-0000-000000000000" \
62+
--password "$oras_access_token"
63+
64+
echo "+++ Publish container $CONTAINER_IMAGE_NAME_FINAL"
65+
docker image push "$CONTAINER_IMAGE_NAME_FINAL"
66+
oras_attach "$CONTAINER_IMAGE_NAME_FINAL"
67+
}
68+
69+
function generate_image_sbom {
70+
if [[ ! "$CREATE_SBOM" =~ [Tt]rue ]]; then
71+
echo "+++ Skip creating SBOM"
72+
return
73+
fi
74+
75+
echo "+++ Generate SBOM for the container image"
76+
echo "Sanitized image name has '/' replaced with '-' and ':' replaced with '_'."
77+
CONTAINER_IMAGE_NAME_SANITIZED=$(echo "$CONTAINER_IMAGE_NAME_FINAL" | tr '/' '-' | tr ':' '_')
78+
echo "CONTAINER_IMAGE_NAME_SANITIZED -> $CONTAINER_IMAGE_NAME_SANITIZED"
79+
80+
DOCKER_BUILD_DIR=$(mktemp -d)
81+
# SBOM script will create the SBOM at the following path.
82+
IMAGE_SBOM_MANIFEST_PATH="$DOCKER_BUILD_DIR/_manifest/spdx_2.2/manifest.spdx.json"
83+
/bin/bash "$SBOM_SCRIPT" \
84+
"$DOCKER_BUILD_DIR" \
85+
"$CONTAINER_IMAGE_NAME_FINAL" \
86+
"$SBOM_TOOL_PATH" \
87+
"$BASE_IMAGE_NAME-$COMPONENT" \
88+
"$COMPONENT_VERSION-$DISTRO_IDENTIFIER$BASE_IMAGE_TAG"
89+
90+
SBOM_IMAGES_DIR="$OUTPUT_DIR/SBOM_IMAGES"
91+
mkdir -p "$SBOM_IMAGES_DIR"
92+
cp -v "$IMAGE_SBOM_MANIFEST_PATH" "$SBOM_IMAGES_DIR/$CONTAINER_IMAGE_NAME_SANITIZED.spdx.json"
93+
echo "Generated SBOM:'$SBOM_IMAGES_DIR/$CONTAINER_IMAGE_NAME_SANITIZED.spdx.json'"
94+
sudo rm -rf "$DOCKER_BUILD_DIR"
95+
}

.pipelines/containerSourceData/scripts/BuildGoldenContainer.sh

Lines changed: 9 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ set -e
4747
# │ ├── acrRepoV2.json
4848
# ├── scripts
4949
# │ ├── BuildGoldenContainer.sh
50+
# │ ├── BuildContainerCommonSteps.sh
5051
# ├── Dockerfile-Initial
5152
# ├── azurelinuxlocal.repo
5253

@@ -189,28 +190,6 @@ function validate_inputs {
189190
fi
190191
}
191192

192-
function initialization {
193-
echo "+++ Initialization"
194-
if [ "$PUBLISHING_LEVEL" = "preview" ]; then
195-
GOLDEN_IMAGE_NAME=${ACR}.azurecr.io/${REPO_PREFIX}/${REPOSITORY}
196-
elif [ "$PUBLISHING_LEVEL" = "development" ]; then
197-
GOLDEN_IMAGE_NAME=${ACR}.azurecr.io/${REPOSITORY}
198-
fi
199-
200-
BASE_IMAGE_NAME=${BASE_IMAGE_NAME_FULL%:*} # mcr.microsoft.com/azurelinux/base/core
201-
BASE_IMAGE_TAG=${BASE_IMAGE_NAME_FULL#*:} # 3.0
202-
AZURE_LINUX_VERSION=${BASE_IMAGE_TAG%.*} # 3.0
203-
DISTRO_IDENTIFIER="azl"
204-
END_OF_LIFE_1_YEAR=$(date -d "+1 year" "+%Y-%m-%dT%H:%M:%SZ")
205-
206-
echo "Golden Image Name -> $GOLDEN_IMAGE_NAME"
207-
echo "Base ACR Container Name -> $BASE_IMAGE_NAME"
208-
echo "Base ACR Container Tag -> $BASE_IMAGE_TAG"
209-
echo "Azure Linux Version -> $AZURE_LINUX_VERSION"
210-
echo "Distro Identifier -> $DISTRO_IDENTIFIER"
211-
echo "End of Life -> $END_OF_LIFE_1_YEAR"
212-
}
213-
214193
function get_packages_to_install {
215194
echo "+++ Get packages to install"
216195
packagesFilePath="$CONTAINER_SRC_DIR/$IMAGE/$PACKAGE_FILE"
@@ -269,14 +248,14 @@ function docker_build {
269248
echo "docker buildx build $DOCKER_BUILD_ARGS" \
270249
"--build-arg BASE_IMAGE=$BASE_IMAGE_NAME_FULL" \
271250
"--build-arg RPMS_TO_INSTALL=$PACKAGES_TO_INSTALL" \
272-
"-t $GOLDEN_IMAGE_NAME --no-cache --progress=plain" \
251+
"-t $CONTAINER_IMAGE_NAME --no-cache --progress=plain" \
273252
"-f $WORK_DIR/Dockerfile ."
274253

275254
echo ""
276255
docker buildx build $DOCKER_BUILD_ARGS \
277256
--build-arg BASE_IMAGE="$BASE_IMAGE_NAME_FULL" \
278257
--build-arg RPMS_TO_INSTALL="$PACKAGES_TO_INSTALL" \
279-
-t "$GOLDEN_IMAGE_NAME" --no-cache --progress=plain \
258+
-t "$CONTAINER_IMAGE_NAME" --no-cache --progress=plain \
280259
-f "$WORK_DIR/Dockerfile" .
281260
popd > /dev/null
282261
}
@@ -286,7 +265,7 @@ function set_image_tag {
286265
local containerId
287266
local installedPackage
288267

289-
containerId=$(docker run --entrypoint /bin/sh -dt "$GOLDEN_IMAGE_NAME")
268+
containerId=$(docker run --entrypoint /bin/sh -dt "$CONTAINER_IMAGE_NAME")
290269

291270
echo "Container ID -> $containerId"
292271

@@ -312,77 +291,14 @@ function set_image_tag {
312291
# Rename the image to include package version
313292
# For HCI Images, do not include "-$DISTRO_IDENTIFIER" in the image tag; Instead use a "."
314293
if [ "$IS_HCI_IMAGE" = true ]; then
315-
# Example: acrafoimages.azurecr.io/base/kubevirt/virt-operator:0.59.0-2.3.0.20240101-amd64
316-
GOLDEN_IMAGE_NAME_FINAL="$GOLDEN_IMAGE_NAME:$COMPONENT_VERSION.$BASE_IMAGE_TAG"
294+
# Example: acrafoimages.azurecr.io/base/kubevirt/virt-operator:0.59.0-2.2.0.20230607-amd64
295+
CONTAINER_IMAGE_NAME_FINAL="$CONTAINER_IMAGE_NAME:$COMPONENT_VERSION.$BASE_IMAGE_TAG"
317296
else
318-
# Example: azurelinuxpreview.azurecr.io/base/nodejs:18.18.2-2-$DISTRO_IDENTIFIER3.0.20240101-amd64
319-
GOLDEN_IMAGE_NAME_FINAL="$GOLDEN_IMAGE_NAME:$COMPONENT_VERSION-$DISTRO_IDENTIFIER$BASE_IMAGE_TAG"
297+
# Example: azurelinuxpreview.azurecr.io/base/nodejs:16.19.1-2-$DISTRO_IDENTIFIER2.0.20230607-amd64
298+
CONTAINER_IMAGE_NAME_FINAL="$CONTAINER_IMAGE_NAME:$COMPONENT_VERSION-$DISTRO_IDENTIFIER$BASE_IMAGE_TAG"
320299
fi
321300
}
322301

323-
function finalize {
324-
echo "+++ Finalize"
325-
docker image tag "$GOLDEN_IMAGE_NAME" "$GOLDEN_IMAGE_NAME_FINAL"
326-
docker rmi -f "$GOLDEN_IMAGE_NAME"
327-
echo "+++ Save container image name to file PublishedContainers-$IMAGE.txt"
328-
echo "$GOLDEN_IMAGE_NAME_FINAL" >> "$OUTPUT_DIR/PublishedContainers-$IMAGE.txt"
329-
}
330-
331-
function oras_attach {
332-
local image_name=$1
333-
oras attach \
334-
--artifact-type "application/vnd.microsoft.artifact.lifecycle" \
335-
--annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$END_OF_LIFE_1_YEAR" \
336-
"$image_name"
337-
}
338-
339-
function publish_to_acr {
340-
CONTAINER_IMAGE=$1
341-
if [[ ! "$PUBLISH_TO_ACR" =~ [Tt]rue ]]; then
342-
echo "+++ Skip publishing to ACR"
343-
return
344-
fi
345-
local oras_access_token
346-
347-
echo "+++ az login into Azure ACR $ACR"
348-
oras_access_token=$(az acr login --name "$ACR" --expose-token --output tsv --query accessToken)
349-
oras login "$ACR.azurecr.io" \
350-
--username "00000000-0000-0000-0000-000000000000" \
351-
--password "$oras_access_token"
352-
353-
echo "+++ Publish container $CONTAINER_IMAGE"
354-
docker image push "$CONTAINER_IMAGE"
355-
oras_attach "$CONTAINER_IMAGE"
356-
}
357-
358-
function generate_image_sbom {
359-
if [[ ! "$CREATE_SBOM" =~ [Tt]rue ]]; then
360-
echo "+++ Skip creating SBOM"
361-
return
362-
fi
363-
364-
echo "+++ Generate SBOM for the container image"
365-
echo "Sanitized image name has '/' replaced with '-' and ':' replaced with '_'."
366-
GOLDEN_IMAGE_NAME_SANITIZED=$(echo "$GOLDEN_IMAGE_NAME_FINAL" | tr '/' '-' | tr ':' '_')
367-
echo "GOLDEN_IMAGE_NAME_SANITIZED -> $GOLDEN_IMAGE_NAME_SANITIZED"
368-
369-
DOCKER_BUILD_DIR=$(mktemp -d)
370-
# SBOM script will create the SBOM at the following path.
371-
IMAGE_SBOM_MANIFEST_PATH="$DOCKER_BUILD_DIR/_manifest/spdx_2.2/manifest.spdx.json"
372-
/bin/bash "$SBOM_SCRIPT" \
373-
"$DOCKER_BUILD_DIR" \
374-
"$GOLDEN_IMAGE_NAME_FINAL" \
375-
"$SBOM_TOOL_PATH" \
376-
"$BASE_IMAGE_NAME-$COMPONENT" \
377-
"$COMPONENT_VERSION-$DISTRO_IDENTIFIER$BASE_IMAGE_TAG"
378-
379-
SBOM_IMAGES_DIR="$OUTPUT_DIR/SBOM_IMAGES"
380-
mkdir -p "$SBOM_IMAGES_DIR"
381-
cp -v "$IMAGE_SBOM_MANIFEST_PATH" "$SBOM_IMAGES_DIR/$GOLDEN_IMAGE_NAME_SANITIZED.spdx.json"
382-
echo "Generated SBOM:'$SBOM_IMAGES_DIR/$GOLDEN_IMAGE_NAME_SANITIZED.spdx.json'"
383-
sudo rm -rf "$DOCKER_BUILD_DIR"
384-
}
385-
386302
function distroless_container {
387303
if [[ ! "$DISTROLESS" =~ [Tt]rue ]]; then
388304
echo "+++ Skip creating distroless container"
@@ -394,6 +310,7 @@ function distroless_container {
394310
create_distroless_container
395311
}
396312

313+
source "$CONTAINER_SRC_DIR/scripts/BuildContainerCommonSteps.sh"
397314
print_inputs
398315
validate_inputs
399316
initialization
@@ -404,6 +321,4 @@ prepare_docker_directory
404321
docker_build
405322
set_image_tag
406323
finalize
407-
publish_to_acr "$GOLDEN_IMAGE_NAME_FINAL"
408-
generate_image_sbom
409324
distroless_container

0 commit comments

Comments
 (0)