Skip to content

Commit

Permalink
feat(ci): remove infer track from upload
Browse files Browse the repository at this point in the history
* Remove dir-identifer and track from revision data file and put into
  matrix
  • Loading branch information
zhijie-yang committed Jun 27, 2024
1 parent ed62a34 commit 5b4db04
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 52 deletions.
45 changes: 5 additions & 40 deletions .github/workflows/Image.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ jobs:
./src/image/prepare_single_image_build_matrix.py \
--oci-path ${{ steps.validate-image.outputs.img-path }} \
--revision-data-dir ${{ env.DATA_DIR }} \
--next-revision 0
run-build:
needs: [prepare-build]
Expand Down Expand Up @@ -232,20 +231,7 @@ jobs:
run: |
./src/uploads/swift_lockfile_unlock.sh \
${{ needs.prepare-build.outputs.oci-img-name }}
# The revision files have to be sanitised before merging,
# since the `track` field should not be present.
- name: Sanitise revision files
env:
DATA_DIR: "revision-data"
run: |
set -ex
for revision_file in `ls ${{ env.DATA_DIR }}`
do
jq 'del(.track, .dir_identifier)' ${{ env.DATA_DIR }}/$revision_file > ${{ env.DATA_DIR }}/$revision_file.tmp
mv ${{ env.DATA_DIR }}/$revision_file.tmp ${{ env.DATA_DIR }}/$revision_file
done
- uses: actions/cache/save@v4
with:
path: ${{ steps.prepare-matrix.outputs.revision-data-dir }}
Expand Down Expand Up @@ -283,38 +269,17 @@ jobs:
./src/uploads/requirements.sh
pip install -r src/uploads/requirements.txt -r src/image/requirements.txt
- name: Clone GitHub image repository
uses: actions/checkout@v4
id: clone-image-repo
continue-on-error: true
with:
repository: ${{ matrix.source }}
fetch-depth: 0
path: source

- name: Clone generic image repository
if: ${{ steps.clone-image-repo.outcome == 'failure' }}
run: |
git clone ${{ matrix.source }} source
- run: cd source && git checkout ${{ matrix.commit }}

- uses: actions/cache/restore@v4
with:
path: ${{ env.OCI_ARCHIVE_NAME }}
key: ${{ github.run_id }}-${{ matrix.name }}_${{ matrix.commit }}_${{ matrix.dir_identifier }}
fail-on-cache-miss: true

- name: Infer track name
id: get-track
run: |
./src/uploads/infer_image_track.py --recipe-dirname source/${{ matrix.directory }}
- name: Name output artefact
id: rename-oci-archive
run: |
# Rename the OCI archive tarball
canonical_tag="${{ steps.get-track.outputs.track }}_${{ matrix.revision }}"
canonical_tag="${{ matrix.track }}_${{ matrix.revision }}"
name="${{ matrix.name }}_${canonical_tag}"
mv ${{ env.OCI_ARCHIVE_NAME }} $name
Expand Down Expand Up @@ -442,12 +407,12 @@ jobs:
IMAGE_NAME: ${{ matrix.name }}
SWIFT_CONTAINER_NAME: ${{ vars.SWIFT_CONTAINER_NAME }}
run: |
jq --arg base "${{ steps.get-track.outputs.base }}" \
jq --arg base "${{ matrix.base }}" \
--arg digest "${{ steps.upload-image.outputs.digest }}" \
'. + {base: $base, digest: $digest}' <<< '${{ toJSON(matrix) }}' > build_metadata.json
./src/uploads/upload_to_swift.sh \
./src/uploads/upload_to_swift.sh \matrixmatrixmatrixmatrixmatrixmatrixmatrixmatrixmatrixmatrixmatrixmatrixmatrixmatrix
${{ matrix.name }} \
${{ steps.get-track.outputs.track }} \
${{ matrix.outputs.track }} \
${{ matrix.revision }} \
build_metadata.json \
${{ steps.generate-sboms.outputs.sboms }} \
Expand Down
25 changes: 13 additions & 12 deletions src/image/prepare_single_image_build_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def validate_image_trigger(data: dict) -> None:
parser.add_argument(
"--next-revision",
help="Next revision number",
required=True,
default=1,
)
parser.add_argument(
"--infer-image-track",
Expand Down Expand Up @@ -63,11 +63,15 @@ def validate_image_trigger(data: dict) -> None:
for img_number, _ in enumerate(builds):
builds[img_number]["name"] = args.oci_path.rstrip("/").split("/")[-1]
builds[img_number]["path"] = args.oci_path
builds[img_number]["dir_identifier"] = builds[img_number]["directory"].rstrip("/").replace("/", "_")
# make sure every build of this image has a unique identifier
# within the execution of the workflow - use revision number
builds[img_number]["revision"] = img_number + int(args.next_revision)

with open(
f"{args.revision_data_dir}/{builds[img_number]['revision']}",
"w",
encoding="UTF-8"
) as data_file:
json.dump(builds[img_number], data_file)

if args.infer_image_track:
import sys
sys.path.append("src/")
Expand All @@ -82,16 +86,13 @@ def validate_image_trigger(data: dict) -> None:
with open(f"{d}/{builds[img_number]['directory']}/rockcraft.yaml", encoding="UTF-8") as rockcraft_file:
rockcraft_yaml = yaml.load(rockcraft_file, Loader=yaml.BaseLoader)

_, track = get_base_and_track(rockcraft_yaml)
base_release, track = get_base_and_track(rockcraft_yaml)
builds[img_number]["track"] = track
builds[img_number]["base"] = f"ubuntu:{base_release}"

with open(
f"{args.revision_data_dir}/{builds[img_number]['revision']}",
"w",
encoding="UTF-8"
) as data_file:
json.dump(builds[img_number], data_file)

# make sure every build of this image has a unique identifier
# within the execution of the workflow - use revision number
builds[img_number]["dir_identifier"] = builds[img_number]["directory"].rstrip("/").replace("/", "_")
# Add dir_identifier to assemble the cache key and artefact path
# No need to write it to rev data file since it's only used in matrix
builds[img_number]["dir_identifier"] = builds[img_number]["directory"].rstrip("/").replace("/", "_")
Expand Down

0 comments on commit 5b4db04

Please sign in to comment.