Update build_zip.yml

This commit is contained in:
2025-12-16 18:08:57 -06:00
parent e47aeee188
commit 2afef42cdc

View File

@@ -7,13 +7,14 @@ on:
description: "Folder to zip (relative to repo root)"
required: false
default: "src"
version_suffix:
description: "Optional version suffix for filename (example 01.02.03)"
required: false
default: ""
permissions:
contents: read
actions:
contents: read
jobs:
zip:
name: Package folder as ZIP
@@ -23,7 +24,28 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Validate target folder
- name: Verify tooling
shell: bash
run: |
set -euo pipefail
if ! command -v zip >/dev/null 2>&1; then
echo "ERROR: zip is not installed on runner" >&2
exit 1
fi
if ! command -v sha256sum >/dev/null 2>&1; then
echo "ERROR: sha256sum is not available on runner" >&2
exit 1
fi
if command -v zipinfo >/dev/null 2>&1; then
echo "ZIPINFO_AVAILABLE=true" >> "$GITHUB_ENV"
else
echo "ZIPINFO_AVAILABLE=false" >> "$GITHUB_ENV"
fi
- name: Validate inputs
shell: bash
run: |
set -euo pipefail
@@ -33,12 +55,28 @@ jobs:
TARGET_FOLDER="src"
fi
VERSION_SUFFIX="${{ github.event.inputs.version_suffix }}"
VERSION_SUFFIX="${VERSION_SUFFIX//[[:space:]]/}"
if [[ ! -d "$TARGET_FOLDER" ]]; then
echo "ERROR: Folder does not exist: $TARGET_FOLDER" >&2
exit 1
fi
if [[ -n "$VERSION_SUFFIX" ]] && [[ ! "$VERSION_SUFFIX" =~ ^[0-9]{2}\.[0-9]{2}\.[0-9]{2}$ ]]; then
echo "ERROR: version_suffix must match NN.NN.NN (example 01.02.03)" >&2
exit 1
fi
echo "TARGET_FOLDER=$TARGET_FOLDER" >> "$GITHUB_ENV"
echo "VERSION_SUFFIX=$VERSION_SUFFIX" >> "$GITHUB_ENV"
- name: Prepare dist folder
shell: bash
run: |
set -euo pipefail
rm -rf dist
mkdir -p dist
- name: Create ZIP archive
shell: bash
@@ -47,19 +85,60 @@ jobs:
REPO_NAME="${GITHUB_REPOSITORY##*/}"
SAFE_FOLDER_NAME="$(echo "$TARGET_FOLDER" | tr '/' '-')"
ZIP_NAME="${REPO_NAME}-${SAFE_FOLDER_NAME}.zip"
rm -f "$ZIP_NAME"
if [[ -n "$VERSION_SUFFIX" ]]; then
ZIP_NAME="${REPO_NAME}-${SAFE_FOLDER_NAME}-${VERSION_SUFFIX}.zip"
else
ZIP_NAME="${REPO_NAME}-${SAFE_FOLDER_NAME}.zip"
fi
ZIP_PATH="dist/$ZIP_NAME"
cd "$TARGET_FOLDER"
zip -r "../$ZIP_NAME" . \
zip -r "../$ZIP_PATH" . \
-x "*.DS_Store" \
-x "__MACOSX/*"
-x "__MACOSX/*" \
-x "**/.git/**" \
-x "**/.github/**" \
-x "**/node_modules/**" \
-x "**/coverage/**" \
-x "**/*.log" \
-x "**/*.tmp"
echo "ZIP_NAME=$ZIP_NAME" >> "$GITHUB_ENV"
echo "ZIP_PATH=$ZIP_PATH" >> "$GITHUB_ENV"
- name: Upload ZIP artifact
- name: Generate manifest
shell: bash
run: |
set -euo pipefail
MANIFEST_PATH="dist/${ZIP_NAME}.manifest.txt"
if [[ "$ZIPINFO_AVAILABLE" == "true" ]]; then
zipinfo -1 "$ZIP_PATH" > "$MANIFEST_PATH"
else
unzip -Z1 "$ZIP_PATH" > "$MANIFEST_PATH"
fi
echo "MANIFEST_PATH=$MANIFEST_PATH" >> "$GITHUB_ENV"
- name: Generate SHA256
shell: bash
run: |
set -euo pipefail
SHA_PATH="dist/${ZIP_NAME}.sha256"
sha256sum "$ZIP_PATH" > "$SHA_PATH"
echo "SHA_PATH=$SHA_PATH" >> "$GITHUB_ENV"
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: packaged-folder
path: ${{ env.ZIP_NAME }}
path: |
${{ env.ZIP_PATH }}
${{ env.MANIFEST_PATH }}
${{ env.SHA_PATH }}