Handle downloaded mirror metadata layout

This commit is contained in:
Tony
2026-06-26 09:51:29 +08:00
parent 2d5f61d6f1
commit 2b3cf2592e
4 changed files with 39 additions and 8 deletions
+27 -3
View File
@@ -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 <engine>/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
@@ -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" <<EOF
mkdir -p "$DOWNLOADED/mirror-metadata/$ENGINE_REVISION"
cat > "$DOWNLOADED/mirror-metadata/$ENGINE_REVISION/artifacts_manifest.yaml" <<EOF
flutter_engine_revision: 'base-engine'
storage_bucket: 'shorebird'
artifact_overrides:
@@ -78,7 +78,7 @@ artifact_overrides:
- 'flutter_infra_release/flutter/\$engine/darwin-arm64-release/FlutterMacOS.framework.zip'
EOF
"$ROOT/scripts/write_sha256.sh" \
"$DOWNLOADED/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION/artifacts_manifest.yaml"
"$DOWNLOADED/mirror-metadata/$ENGINE_REVISION/artifacts_manifest.yaml"
write_patch_artifact() {
local artifact_name="$1"
+4 -2
View File
@@ -14,13 +14,15 @@ INPUT_DIR="$TMP_DIR/downloaded-artifacts"
OUTPUT_DIR="$TMP_DIR/mirror"
mkdir -p "$INPUT_DIR"
mkdir -p "$INPUT_DIR/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION"
cat > "$INPUT_DIR/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION/artifacts_manifest.yaml" <<EOF
mkdir -p "$INPUT_DIR/mirror-metadata/$ENGINE_REVISION"
cat > "$INPUT_DIR/mirror-metadata/$ENGINE_REVISION/artifacts_manifest.yaml" <<EOF
flutter_engine_revision: 'base-engine'
storage_bucket: 'shorebird'
artifact_overrides:
- 'flutter_infra_release/flutter/\$engine/linux-x64-release/artifacts.zip'
EOF
"$ROOT/scripts/write_sha256.sh" \
"$INPUT_DIR/mirror-metadata/$ENGINE_REVISION/artifacts_manifest.yaml"
mkdir -p "$INPUT_DIR/mirror-patch/artifacts/mirror/shorebird/$ENGINE_REVISION"
"$PYTHON_BIN" - "$INPUT_DIR/mirror-patch/artifacts/mirror/shorebird/$ENGINE_REVISION" <<'PY'
+5
View File
@@ -1253,6 +1253,9 @@ write_release_manifest = read_repo_file(repo_root, 'scripts/write_release_manife
verify_release_manifest = read_repo_file(repo_root, 'scripts/verify_release_manifest.sh')
assert!(
assemble_artifact_mirror.include?('scan_for_shorebird_trees "$INPUT_DIR"') &&
assemble_artifact_mirror.include?('scan_for_downloaded_metadata_trees "$INPUT_DIR"') &&
assemble_artifact_mirror.include?('copy_tree_to_shorebird_prefix') &&
assemble_artifact_mirror.include?('<engine>/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') &&