Handle downloaded mirror metadata layout
This commit is contained in:
@@ -38,18 +38,19 @@ mkdir -p "$OUTPUT_DIR"
|
|||||||
|
|
||||||
FOUND_TREES=0
|
FOUND_TREES=0
|
||||||
|
|
||||||
copy_shorebird_tree() {
|
copy_tree_to_shorebird_prefix() {
|
||||||
local tree="$1"
|
local tree="$1"
|
||||||
|
local prefix="$2"
|
||||||
local source_file rel_file target_file
|
local source_file rel_file target_file
|
||||||
|
|
||||||
FOUND_TREES=$((FOUND_TREES + 1))
|
FOUND_TREES=$((FOUND_TREES + 1))
|
||||||
while IFS= read -r -d '' source_file; do
|
while IFS= read -r -d '' source_file; do
|
||||||
rel_file="${source_file#"$tree"/}"
|
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")"
|
mkdir -p "$(dirname "$target_file")"
|
||||||
if [[ -e "$target_file" ]]; then
|
if [[ -e "$target_file" ]]; then
|
||||||
if ! cmp -s "$source_file" "$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 " existing: $target_file" >&2
|
||||||
echo " incoming: $source_file" >&2
|
echo " incoming: $source_file" >&2
|
||||||
exit 70
|
exit 70
|
||||||
@@ -60,6 +61,10 @@ copy_shorebird_tree() {
|
|||||||
done < <(find "$tree" -type f -print0)
|
done < <(find "$tree" -type f -print0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
copy_shorebird_tree() {
|
||||||
|
copy_tree_to_shorebird_prefix "$1" ""
|
||||||
|
}
|
||||||
|
|
||||||
scan_for_shorebird_trees() {
|
scan_for_shorebird_trees() {
|
||||||
local search_root="$1"
|
local search_root="$1"
|
||||||
local tree
|
local tree
|
||||||
@@ -69,7 +74,26 @@ scan_for_shorebird_trees() {
|
|||||||
done < <(find "$search_root" -type d -name shorebird -print0)
|
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_shorebird_trees "$INPUT_DIR"
|
||||||
|
scan_for_downloaded_metadata_trees "$INPUT_DIR"
|
||||||
|
|
||||||
archive_index=0
|
archive_index=0
|
||||||
while IFS= read -r -d '' archive_path; do
|
while IFS= read -r -d '' archive_path; do
|
||||||
|
|||||||
@@ -63,8 +63,8 @@ for target in \
|
|||||||
write_artifact "$DOWNLOADED/$target" "$target"
|
write_artifact "$DOWNLOADED/$target" "$target"
|
||||||
done
|
done
|
||||||
|
|
||||||
mkdir -p "$DOWNLOADED/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION"
|
mkdir -p "$DOWNLOADED/mirror-metadata/$ENGINE_REVISION"
|
||||||
cat > "$DOWNLOADED/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION/artifacts_manifest.yaml" <<EOF
|
cat > "$DOWNLOADED/mirror-metadata/$ENGINE_REVISION/artifacts_manifest.yaml" <<EOF
|
||||||
flutter_engine_revision: 'base-engine'
|
flutter_engine_revision: 'base-engine'
|
||||||
storage_bucket: 'shorebird'
|
storage_bucket: 'shorebird'
|
||||||
artifact_overrides:
|
artifact_overrides:
|
||||||
@@ -78,7 +78,7 @@ artifact_overrides:
|
|||||||
- 'flutter_infra_release/flutter/\$engine/darwin-arm64-release/FlutterMacOS.framework.zip'
|
- 'flutter_infra_release/flutter/\$engine/darwin-arm64-release/FlutterMacOS.framework.zip'
|
||||||
EOF
|
EOF
|
||||||
"$ROOT/scripts/write_sha256.sh" \
|
"$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() {
|
write_patch_artifact() {
|
||||||
local artifact_name="$1"
|
local artifact_name="$1"
|
||||||
|
|||||||
@@ -14,13 +14,15 @@ INPUT_DIR="$TMP_DIR/downloaded-artifacts"
|
|||||||
OUTPUT_DIR="$TMP_DIR/mirror"
|
OUTPUT_DIR="$TMP_DIR/mirror"
|
||||||
mkdir -p "$INPUT_DIR"
|
mkdir -p "$INPUT_DIR"
|
||||||
|
|
||||||
mkdir -p "$INPUT_DIR/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION"
|
mkdir -p "$INPUT_DIR/mirror-metadata/$ENGINE_REVISION"
|
||||||
cat > "$INPUT_DIR/mirror-metadata/artifacts/mirror/shorebird/$ENGINE_REVISION/artifacts_manifest.yaml" <<EOF
|
cat > "$INPUT_DIR/mirror-metadata/$ENGINE_REVISION/artifacts_manifest.yaml" <<EOF
|
||||||
flutter_engine_revision: 'base-engine'
|
flutter_engine_revision: 'base-engine'
|
||||||
storage_bucket: 'shorebird'
|
storage_bucket: 'shorebird'
|
||||||
artifact_overrides:
|
artifact_overrides:
|
||||||
- 'flutter_infra_release/flutter/\$engine/linux-x64-release/artifacts.zip'
|
- 'flutter_infra_release/flutter/\$engine/linux-x64-release/artifacts.zip'
|
||||||
EOF
|
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"
|
mkdir -p "$INPUT_DIR/mirror-patch/artifacts/mirror/shorebird/$ENGINE_REVISION"
|
||||||
"$PYTHON_BIN" - "$INPUT_DIR/mirror-patch/artifacts/mirror/shorebird/$ENGINE_REVISION" <<'PY'
|
"$PYTHON_BIN" - "$INPUT_DIR/mirror-patch/artifacts/mirror/shorebird/$ENGINE_REVISION" <<'PY'
|
||||||
|
|||||||
@@ -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')
|
verify_release_manifest = read_repo_file(repo_root, 'scripts/verify_release_manifest.sh')
|
||||||
assert!(
|
assert!(
|
||||||
assemble_artifact_mirror.include?('scan_for_shorebird_trees "$INPUT_DIR"') &&
|
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?("find \"$INPUT_DIR\" -type f \\( -name '*.tar.gz' -o -name '*.tgz' \\)") &&
|
||||||
assemble_artifact_mirror.include?('scripts/safe_extract_tar.py') &&
|
assemble_artifact_mirror.include?('scripts/safe_extract_tar.py') &&
|
||||||
assemble_artifact_mirror.include?('conflicting mirror file') &&
|
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-x64.zip') &&
|
||||||
verify_assemble_artifact_mirror.include?('patch-darwin-arm64.zip') &&
|
verify_assemble_artifact_mirror.include?('patch-darwin-arm64.zip') &&
|
||||||
verify_assemble_artifact_mirror.include?('patch-windows-x64.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?('artifacts_manifest.yaml') &&
|
||||||
verify_assemble_artifact_mirror.include?('unexpectedly allowed a conflicting mirror file') &&
|
verify_assemble_artifact_mirror.include?('unexpectedly allowed a conflicting mirror file') &&
|
||||||
verify_assemble_artifact_mirror.include?('unexpectedly allowed an unsafe tar member') &&
|
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?('verify_downloaded_release_artifacts.sh') &&
|
||||||
verify_artifact_mirror_workflow_assembly.include?('validate_artifact_mirror.py') &&
|
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?('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?('mirror-metadata/*artifacts_manifest.yaml') &&
|
||||||
verify_artifact_mirror_workflow_assembly.include?('flutter_patched_sdk_product.zip') &&
|
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') &&
|
verify_artifact_mirror_workflow_assembly.include?('unexpectedly accepted downloaded artifacts for the wrong github_sha') &&
|
||||||
|
|||||||
Reference in New Issue
Block a user