From 2b3cf2592e3a983b66f32fa05ad717361b557719 Mon Sep 17 00:00:00 2001 From: Tony Date: Fri, 26 Jun 2026 09:51:29 +0800 Subject: [PATCH] Handle downloaded mirror metadata layout --- scripts/assemble_artifact_mirror.sh | 30 +++++++++++++++++-- ...erify_artifact_mirror_workflow_assembly.sh | 6 ++-- scripts/verify_assemble_artifact_mirror.sh | 6 ++-- scripts/verify_ci_workflow.rb | 5 ++++ 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/scripts/assemble_artifact_mirror.sh b/scripts/assemble_artifact_mirror.sh index c4f256c..1decf0b 100755 --- a/scripts/assemble_artifact_mirror.sh +++ b/scripts/assemble_artifact_mirror.sh @@ -38,18 +38,19 @@ mkdir -p "$OUTPUT_DIR" FOUND_TREES=0 -copy_shorebird_tree() { +copy_tree_to_shorebird_prefix() { local tree="$1" + local prefix="$2" local source_file rel_file target_file FOUND_TREES=$((FOUND_TREES + 1)) while IFS= read -r -d '' source_file; do rel_file="${source_file#"$tree"/}" - target_file="$OUTPUT_DIR/shorebird/$rel_file" + target_file="$OUTPUT_DIR/shorebird/$prefix$rel_file" mkdir -p "$(dirname "$target_file")" if [[ -e "$target_file" ]]; then if ! cmp -s "$source_file" "$target_file"; then - echo "conflicting mirror file: shorebird/$rel_file" >&2 + echo "conflicting mirror file: shorebird/$prefix$rel_file" >&2 echo " existing: $target_file" >&2 echo " incoming: $source_file" >&2 exit 70 @@ -60,6 +61,10 @@ copy_shorebird_tree() { done < <(find "$tree" -type f -print0) } +copy_shorebird_tree() { + copy_tree_to_shorebird_prefix "$1" "" +} + scan_for_shorebird_trees() { local search_root="$1" local tree @@ -69,7 +74,26 @@ scan_for_shorebird_trees() { done < <(find "$search_root" -type d -name shorebird -print0) } +scan_for_downloaded_metadata_trees() { + local search_root="$1" + local manifest_path metadata_dir engine_revision + + # actions/upload-artifact strips the non-wildcard prefix from + # artifacts/mirror/shorebird/**/artifacts_manifest.yaml, so the downloaded + # mirror-metadata artifact is shaped as /artifacts_manifest.yaml. + while IFS= read -r -d '' manifest_path; do + if [[ "$manifest_path" == */shorebird/* ]]; then + continue + fi + + metadata_dir="$(dirname "$manifest_path")" + engine_revision="$(basename "$metadata_dir")" + copy_tree_to_shorebird_prefix "$metadata_dir" "$engine_revision/" + done < <(find "$search_root" -type f -name artifacts_manifest.yaml -print0) +} + scan_for_shorebird_trees "$INPUT_DIR" +scan_for_downloaded_metadata_trees "$INPUT_DIR" archive_index=0 while IFS= read -r -d '' archive_path; do diff --git a/scripts/verify_artifact_mirror_workflow_assembly.sh b/scripts/verify_artifact_mirror_workflow_assembly.sh index 96d5436..d60cab4 100755 --- a/scripts/verify_artifact_mirror_workflow_assembly.sh +++ b/scripts/verify_artifact_mirror_workflow_assembly.sh @@ -63,8 +63,8 @@ for target in \ write_artifact "$DOWNLOADED/$target" "$target" done -mkdir -p "$DOWNLOADED/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION" -cat > "$DOWNLOADED/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION/artifacts_manifest.yaml" < "$DOWNLOADED/mirror-metadata/$ENGINE_REVISION/artifacts_manifest.yaml" < "$INPUT_DIR/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION/artifacts_manifest.yaml" < "$INPUT_DIR/mirror-metadata/$ENGINE_REVISION/artifacts_manifest.yaml" </artifacts_manifest.yaml') && assemble_artifact_mirror.include?("find \"$INPUT_DIR\" -type f \\( -name '*.tar.gz' -o -name '*.tgz' \\)") && assemble_artifact_mirror.include?('scripts/safe_extract_tar.py') && assemble_artifact_mirror.include?('conflicting mirror file') && @@ -1294,6 +1297,7 @@ assert!( verify_assemble_artifact_mirror.include?('patch-darwin-x64.zip') && verify_assemble_artifact_mirror.include?('patch-darwin-arm64.zip') && verify_assemble_artifact_mirror.include?('patch-windows-x64.zip') && + verify_assemble_artifact_mirror.include?('mirror-metadata/$ENGINE_REVISION') && verify_assemble_artifact_mirror.include?('artifacts_manifest.yaml') && verify_assemble_artifact_mirror.include?('unexpectedly allowed a conflicting mirror file') && verify_assemble_artifact_mirror.include?('unexpectedly allowed an unsafe tar member') && @@ -1321,6 +1325,7 @@ assert!( verify_artifact_mirror_workflow_assembly.include?('verify_downloaded_release_artifacts.sh') && verify_artifact_mirror_workflow_assembly.include?('validate_artifact_mirror.py') && verify_artifact_mirror_workflow_assembly.include?('safe_extract_tar.py') && + verify_artifact_mirror_workflow_assembly.include?('mirror-metadata/$ENGINE_REVISION') && verify_artifact_mirror_workflow_assembly.include?('mirror-metadata/*artifacts_manifest.yaml') && verify_artifact_mirror_workflow_assembly.include?('flutter_patched_sdk_product.zip') && verify_artifact_mirror_workflow_assembly.include?('unexpectedly accepted downloaded artifacts for the wrong github_sha') &&