Skip to content

Commit 27d800d

Browse files
committed
chore: fixes from GPT-5.6 Sol high
1 parent fb79f7c commit 27d800d

13 files changed

Lines changed: 288 additions & 107 deletions

File tree

.github/actions/commit-releases-json/action.yaml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,20 @@ runs:
4646
git config user.email "${{ inputs.email }}"
4747
git config user.name "${{ inputs.actor }}"
4848
49-
git add oci/${{ inputs.image-name }}/_releases.json
50-
if [[ -f oci/${{ inputs.image-name }}/_pro_releases.json ]]; then
51-
git add oci/${{ inputs.image-name }}/_pro_releases.json
49+
release_files=()
50+
for release_file in _releases.json _pro_releases.json; do
51+
path="oci/${{ inputs.image-name }}/${release_file}"
52+
if [[ -f "$path" ]]; then
53+
release_files+=("$path")
54+
fi
55+
done
56+
57+
if [[ ${#release_files[@]} -eq 0 ]]; then
58+
echo "No release files found for ${{ inputs.image-name }}" >&2
59+
exit 1
5260
fi
61+
62+
git add -- "${release_files[@]}"
5363
git commit -m "${{ inputs.message }}"
5464
5565
for i in {1..10}; do

.github/actions/fetch-releases-json/copy-releases-files.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ if [[ "$image_name" = "*" ]]; then
1919
find . -name "_releases.json" -exec cp --parents {} "$OLDPWD" \;
2020
find . -name "_pro_releases.json" -exec cp --parents {} "$OLDPWD" \;
2121
cd "$OLDPWD" || exit 1
22-
elif [[ -f "$directory/oci/$image_name/_releases.json" ]]; then
23-
cp "$directory/oci/$image_name/_releases.json" "oci/$image_name/_releases.json"
22+
else
23+
if [[ -f "$directory/oci/$image_name/_releases.json" ]]; then
24+
cp "$directory/oci/$image_name/_releases.json" "oci/$image_name/_releases.json"
25+
fi
2426
if [[ -f "$directory/oci/$image_name/_pro_releases.json" ]]; then
2527
cp "$directory/oci/$image_name/_pro_releases.json" "oci/$image_name/_pro_releases.json"
2628
fi

.github/workflows/Build-Rock.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ jobs:
9696
- name: Check Pro Build
9797
id: check-pro-build
9898
env:
99+
ARTIFACT_PASSPHRASE: ${{ secrets.pro-artifact-passphrase }}
99100
UBUNTU_PRO_TOKEN: ${{ secrets.pro-token }}
100101
INPUTS_PRO_SERVICES: ${{ inputs.pro-services }}
101102
run: |
@@ -104,6 +105,10 @@ jobs:
104105
echo "Error: 'pro-token' must be provided in order to use 'pro-services'."
105106
exit 1
106107
fi
108+
if [[ -z "${ARTIFACT_PASSPHRASE:-}" ]]; then
109+
echo "Error: 'pro-artifact-passphrase' must be provided in order to use 'pro-services'."
110+
exit 1
111+
fi
107112
echo "pro-build=true" >> "$GITHUB_OUTPUT"
108113
else
109114
echo "pro-build=false" >> "$GITHUB_OUTPUT"

.github/workflows/Image.yaml

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ jobs:
200200
pro-services: ${{ matrix.pro-services }}
201201
secrets:
202202
source-github-token: ${{ secrets.ROCKSBOT_TOKEN }}
203-
pro-token: ${{ secrets[matrix.pro-token] }}
204-
pro-artifact-passphrase: ${{ secrets[matrix.pro-artifact-passphrase] }}
203+
pro-token: ${{ secrets.ROCKS_PRO_TOKEN }}
204+
pro-artifact-passphrase: ${{ secrets.ROCKS_PRO_ARTIFACT_PASSPHRASE }}
205205

206206
test-rock:
207207
needs: [prepare-build, build-rock]
@@ -212,10 +212,11 @@ jobs:
212212
uses: ./.github/workflows/Test-Rock.yaml
213213
with:
214214
oci-archive-name: "${{ matrix.name }}_${{ matrix.commit }}_${{ matrix.dir_identifier }}"
215+
encrypted-artifact: ${{ matrix.pro-services != '' }}
215216
trivyignore-path: ${{ matrix.ignored-vulnerabilities == '' && format('oci/{0}/.trivyignore', matrix.name) || '' }}
216217
ignored-vulnerabilities: ${{ matrix.ignored-vulnerabilities }}
217218
secrets:
218-
pro-artifact-passphrase: ${{ secrets[matrix.pro-artifact-passphrase] }}
219+
pro-artifact-passphrase: ${{ matrix.pro-services != '' && secrets.ROCKS_PRO_ARTIFACT_PASSPHRASE || '' }}
219220

220221
prepare-upload:
221222
runs-on: self-hosted-linux-amd64-noble-private-endpoint-small
@@ -361,7 +362,7 @@ jobs:
361362
with:
362363
mode: decrypt
363364
input-path: ${{ env.OCI_ARCHIVE_NAME }}.gpg
364-
passphrase: ${{ secrets[matrix.pro-artifact-passphrase] }}
365+
passphrase: ${{ secrets.ROCKS_PRO_ARTIFACT_PASSPHRASE }}
365366
output-path: ${{ env.OCI_ARCHIVE_NAME }}
366367
preserve-original: false
367368

@@ -380,11 +381,6 @@ jobs:
380381
MATRIX_REVISION: ${{ matrix.revision }}
381382
MATRIX_NAME: ${{ matrix.name }}
382383

383-
- uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7
384-
with:
385-
path: ${{ steps.rename-oci-archive.outputs.name }}
386-
key: ${{ github.run_id }}-${{ steps.rename-oci-archive.outputs.name }}
387-
388384
- name: Install Syft
389385
uses: anchore/sbom-action/download-syft@e22c389904149dbc22b58101806040fa8d37a610
390386
with:
@@ -486,7 +482,8 @@ jobs:
486482
if [[ "$RUNNER_DEBUG" == "1" ]]; then
487483
set -x
488484
fi
489-
echo "hashes=$(sha256sum ${VULN_REPORT} ${OCI_IMAGE_ARCHIVE} ${SBOMS} | base64 -w0)"
485+
hashes=$(sha256sum "$VULN_REPORT" "$OCI_IMAGE_ARCHIVE" "$SBOMS" | base64 -w0)
486+
echo "hashes=$hashes" >> "$GITHUB_OUTPUT"
490487
491488
- name: Login to GHCR
492489
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121
@@ -509,7 +506,7 @@ jobs:
509506
with:
510507
mode: encrypt
511508
input-path: ${{ steps.rename-oci-archive.outputs.name }}
512-
passphrase: ${{ secrets[matrix.pro-artifact-passphrase] }}
509+
passphrase: ${{ secrets.ROCKS_PRO_ARTIFACT_PASSPHRASE }}
513510
output-path: ${{ steps.rename-oci-archive.outputs.name }}.gpg
514511

515512
- name: Upload image
@@ -554,7 +551,8 @@ jobs:
554551
--arg digest "${STEPS_UPLOAD_IMAGE_OUTPUTS_DIGEST}" \
555552
--arg ignored_vulnerabilities "${MATRIX_IGNORED_VULNERABILITIES}" \
556553
--arg pro_services "${PRO_SERVICES}" \
557-
'. + {base: $base, digest: $digest, "ignored-vulnerabilities": $ignored_vulnerabilities, "pro-services": $pro_services}' \
554+
'. + {base: $base, digest: $digest, "ignored-vulnerabilities": $ignored_vulnerabilities}
555+
| if $pro_services != "" then . + {"pro-services": $pro_services} else . end' \
558556
<<< '${{ toJSON(matrix) }}' > build_metadata.json
559557
./src/uploads/upload_to_swift.sh \
560558
"${MATRIX_NAME}" \

.github/workflows/Release.yaml

Lines changed: 79 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,12 @@ jobs:
8383
runs-on: self-hosted-linux-amd64-noble-private-endpoint-small
8484
name: Release
8585
needs: [validate-push-release-request]
86+
concurrency:
87+
group: release-${{ inputs.oci-image-name }}
88+
cancel-in-progress: false
8689
outputs:
87-
gh-releases-matrix: ${{ steps.release-image.outputs.gh-releases-matrix }}
90+
gh-releases-matrix: ${{ steps.release-image.outputs.gh-releases-matrix || '{"include":[]}' }}
91+
has-github-releases: ${{ steps.release-image.outputs.has-github-releases }}
8892
is-public-release: ${{ steps.release-type.outputs.is-public-release }}
8993
is-pro-release: ${{ steps.release-type.outputs.is-pro-release }}
9094
env:
@@ -127,8 +131,19 @@ jobs:
127131
echo "is-pro-release=$is_pro_release" >> "$GITHUB_OUTPUT"
128132
is_public_release=$(cat is_public_release.txt)
129133
echo "is-public-release=$is_public_release" >> "$GITHUB_OUTPUT"
134+
if [[ "$is_pro_release" == "true" && -z "${INPUTS_IMAGE_TRIGGER_CACHE_KEY}" ]]; then
135+
log_error "Releasing an existing Pro revision is not supported. Use upload[*].release during the build instead."
136+
exit 1
137+
fi
138+
# Error out if passphrase is not set for Pro release
139+
if [[ "$is_pro_release" == "true" && -z "${ROCKS_PRO_ARTIFACT_PASSPHRASE}" ]]; then
140+
log_error "ROCKS_PRO_ARTIFACT_PASSPHRASE is required for a Pro release."
141+
exit 1
142+
fi
130143
env:
144+
INPUTS_IMAGE_TRIGGER_CACHE_KEY: ${{ inputs.image-trigger-cache-key }}
131145
INPUTS_OCI_IMAGE_NAME: ${{ inputs.oci-image-name }}
146+
ROCKS_PRO_ARTIFACT_PASSPHRASE: ${{ secrets.ROCKS_PRO_ARTIFACT_PASSPHRASE }}
132147

133148
# Download the image if `pro-release` is present and non-empty in the image trigger.
134149
# pattern should match <image_name>_<version>-<base>_*, e.g., mock-rock_1.2-22.04_*
@@ -139,7 +154,7 @@ jobs:
139154
env:
140155
INPUTS_OCI_IMAGE_NAME: ${{ inputs.oci-image-name }}
141156
with:
142-
pattern: +([A-Za-z0-9-])_+([A-Za-z0-9.-])-[0-9][0-9].[0-9][0-9]_+([0-9])
157+
pattern: ${{ inputs.oci-image-name }}_*
143158
merge-multiple: true
144159

145160
# Decrypt the Pro image artifact being downloaded.
@@ -148,22 +163,28 @@ jobs:
148163
- name: Decrypt Pro image artifact
149164
id: decrypt-pro-image-artifact
150165
if: ${{ steps.release-type.outputs.is-pro-release == 'true' }}
166+
env:
167+
ARTIFACT_PASSPHRASE: ${{ secrets.ROCKS_PRO_ARTIFACT_PASSPHRASE }}
168+
ARTIFACT_PATH: ${{ steps.download-image-artifact.outputs.download-path }}
151169
run: |
152170
set -e
153171
if [[ "$RUNNER_DEBUG" == "1" ]]; then
154172
set -x
155173
fi
156174
source src/shared/logs.sh
157-
artifact_path="${{ steps.download-image-artifact.outputs.download-path }}"
158-
for artifact in $artifact_path/*.gpg; do
159-
if [ -f "$artifact" ]; then
160-
log_info "Decrypting artifact: $artifact"
161-
./.github/actions/crypt-artifact/crypt-artifact.sh decrypt \
162-
-i "$artifact" \
163-
-p "${{ secrets.ROCKS_PRO_ARTIFACT_PASSPHRASE }}"
164-
else
165-
log_info "No .gpg artifacts found to decrypt."
166-
fi
175+
176+
shopt -s nullglob
177+
artifacts=("${ARTIFACT_PATH}"/*.gpg)
178+
if [[ ${#artifacts[@]} -eq 0 ]]; then
179+
log_error "No encrypted Pro artifacts were downloaded."
180+
exit 1
181+
fi
182+
183+
for artifact in "${artifacts[@]}"; do
184+
log_info "Decrypting artifact: $artifact"
185+
./.github/actions/crypt-artifact/crypt-artifact.sh decrypt \
186+
-i "$artifact" \
187+
-p "$ARTIFACT_PASSPHRASE"
167188
done
168189
169190
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
@@ -191,6 +212,44 @@ jobs:
191212
IMAGE_NAME: ${{ inputs.oci-image-name }}
192213
SWIFT_CONTAINER_NAME: ${{ vars.SWIFT_CONTAINER_NAME }}
193214
run: ./src/image/get_canonical_tags_from_swift.sh
215+
216+
- name: Validate release requests
217+
env:
218+
ACR_CREDS_USR: ${{ env.IS_PROD == 'true' && secrets.ACR_CREDS_USR || secrets.ACR_CREDS_USR_DEV }}
219+
ACR_CREDS_PSW: ${{ env.IS_PROD == 'true' && secrets.ACR_CREDS_PSW || secrets.ACR_CREDS_PSW_DEV }}
220+
ACR_REGISTRY: ${{ env.IS_PROD == 'true' && 'ubuntu.azurecr.io' || secrets.ACR_REGISTRY_DEV }}
221+
INPUTS_OCI_IMAGE_NAME: ${{ inputs.oci-image-name }}
222+
IS_PRO_RELEASE: ${{ steps.release-type.outputs.is-pro-release }}
223+
IS_PUBLIC_RELEASE: ${{ steps.release-type.outputs.is-public-release }}
224+
PYTHONUNBUFFERED: 1
225+
REVISION_TAGS_FILE: ${{ steps.get-all-canonical-tags.outputs.canonical-tags-file }}
226+
run: |
227+
set -e
228+
source src/shared/logs.sh
229+
230+
if [[ "$IS_PRO_RELEASE" == "true" ]]; then
231+
if [[ -z "${ACR_CREDS_USR:-}" || -z "${ACR_CREDS_PSW:-}" || -z "${ACR_REGISTRY:-}" ]]; then
232+
log_error "ACR registry and credentials are required for a Pro release."
233+
exit 1
234+
fi
235+
python3 -m src.image.release \
236+
--image-trigger "oci/${INPUTS_OCI_IMAGE_NAME}/image.yaml" \
237+
--image-name "$INPUTS_OCI_IMAGE_NAME" \
238+
--all-releases "oci/${INPUTS_OCI_IMAGE_NAME}/_pro_releases.json" \
239+
--all-revision-tags "$REVISION_TAGS_FILE" \
240+
--pro \
241+
--validate-only
242+
fi
243+
244+
if [[ "$IS_PUBLIC_RELEASE" == "true" ]]; then
245+
python3 -m src.image.release \
246+
--image-trigger "oci/${INPUTS_OCI_IMAGE_NAME}/image.yaml" \
247+
--image-name "$INPUTS_OCI_IMAGE_NAME" \
248+
--all-releases "oci/${INPUTS_OCI_IMAGE_NAME}/_releases.json" \
249+
--all-revision-tags "$REVISION_TAGS_FILE" \
250+
--ghcr-repo "${{ github.repository_owner }}/oci-factory" \
251+
--validate-only
252+
fi
194253
195254
# Pull the latest changes to prevent conflicts merging _releases.json
196255
- run: pushd ${{ env.RELEASE_REPO_DIR }} && git pull --quiet && popd
@@ -225,7 +284,6 @@ jobs:
225284
fi
226285
source src/shared/logs.sh
227286
log_info "Running in production? $([[ "$IS_PROD" == "true" ]] && echo YES || echo NO)"
228-
229287
python3 -m src.image.release \
230288
--image-trigger oci/${INPUTS_OCI_IMAGE_NAME}/image.yaml \
231289
--image-name ${INPUTS_OCI_IMAGE_NAME} \
@@ -251,11 +309,15 @@ jobs:
251309
fi
252310
source src/shared/logs.sh
253311
log_info "Running in production? $([[ "$IS_PROD" == "true" ]] && echo YES || echo NO)"
254-
312+
if [[ -z "${ACR_CREDS_USR:-}" || -z "${ACR_CREDS_PSW:-}" || -z "${ACR_REGISTRY:-}" ]]; then
313+
log_error "ACR registry and credentials are required for a Pro release."
314+
exit 1
315+
fi
316+
255317
python3 -m src.image.release \
256318
--image-trigger oci/${INPUTS_OCI_IMAGE_NAME}/image.yaml \
257319
--image-name ${INPUTS_OCI_IMAGE_NAME} \
258-
--all-releases oci/${INPUTS_OCI_IMAGE_NAME}/_releases.json \
320+
--all-releases oci/${INPUTS_OCI_IMAGE_NAME}/_pro_releases.json \
259321
--all-revision-tags "${STEPS_GET_ALL_CANONICAL_TAGS_OUTPUTS_CANONICAL_TAGS_FILE}" \
260322
--pro
261323
@@ -329,6 +391,7 @@ jobs:
329391
runs-on: ubuntu-22.04
330392
name: Github-Release
331393
needs: [do-releases]
394+
if: ${{ needs.do-releases.outputs.has-github-releases == 'true' }}
332395
permissions:
333396
contents: write
334397
strategy:
@@ -343,7 +406,7 @@ jobs:
343406

344407
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
345408
with:
346-
pattern: '*.sbom_preview.spdx.zip'
409+
pattern: '${{ matrix.canonical-tag }}.sbom_preview.spdx.zip'
347410
path: sbom
348411

349412
- name: Unzip SBOM artifacts

0 commit comments

Comments
 (0)