Update build_zip.yml

This commit is contained in:
2025-12-16 19:11:02 -06:00
parent 40c939fd7e
commit f044d5a0e3

View File

@@ -1,20 +1,36 @@
name: Build ZIP from folder name: Build ZIP from folder
on: on:
workflow_dispatch: workflow_call:
inputs: inputs:
target_folder: target_folder:
description: "Folder to zip (relative to repo root)" description: "Folder to zip (relative to repo root)"
required: false required: false
type: string
default: "src" default: "src"
zip_name: zip_name:
description: "Base ZIP name (default: repository name, lowercase)" description: "Base ZIP name (default: repository name, lowercase)"
required: false required: false
type: string
default: "" default: ""
version_suffix: version_suffix:
description: "Optional version suffix for filename (example 01.02.03)" description: "Optional version suffix for filename (example 01.02.03)"
required: false required: false
type: string
default: "" default: ""
outputs:
zip_artifact_name:
description: "Artifact name for the ZIP"
value: ${{ jobs.zip.outputs.zip_artifact_name }}
sha_artifact_name:
description: "Artifact name for the SHA256 file"
value: ${{ jobs.zip.outputs.sha_artifact_name }}
zip_file_name:
description: "ZIP filename inside the artifact"
value: ${{ jobs.zip.outputs.zip_file_name }}
sha_file_name:
description: "SHA256 filename inside the artifact"
value: ${{ jobs.zip.outputs.sha_file_name }}
permissions: permissions:
contents: read contents: read
@@ -24,6 +40,12 @@ jobs:
name: Package folder as ZIP name: Package folder as ZIP
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs:
zip_artifact_name: ${{ steps.meta.outputs.zip_artifact_name }}
sha_artifact_name: ${{ steps.meta.outputs.sha_artifact_name }}
zip_file_name: ${{ steps.meta.outputs.zip_file_name }}
sha_file_name: ${{ steps.meta.outputs.sha_file_name }}
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -43,32 +65,20 @@ jobs:
exit 1 exit 1
fi fi
if command -v zipinfo >/dev/null 2>&1; then
echo "ZIPINFO_AVAILABLE=true" >> "$GITHUB_ENV"
else
echo "ZIPINFO_AVAILABLE=false" >> "$GITHUB_ENV"
fi
if command -v unzip >/dev/null 2>&1; then
echo "UNZIP_AVAILABLE=true" >> "$GITHUB_ENV"
else
echo "UNZIP_AVAILABLE=false" >> "$GITHUB_ENV"
fi
- name: Validate inputs - name: Validate inputs
shell: bash shell: bash
run: | run: |
set -euo pipefail set -euo pipefail
TARGET_FOLDER="${{ github.event.inputs.target_folder }}" TARGET_FOLDER="${{ inputs.target_folder }}"
if [[ -z "$TARGET_FOLDER" ]]; then if [[ -z "$TARGET_FOLDER" ]]; then
TARGET_FOLDER="src" TARGET_FOLDER="src"
fi fi
ZIP_NAME_INPUT="${{ github.event.inputs.zip_name }}" ZIP_NAME_INPUT="${{ inputs.zip_name }}"
ZIP_NAME_INPUT="${ZIP_NAME_INPUT//[[:space:]]/}" ZIP_NAME_INPUT="${ZIP_NAME_INPUT//[[:space:]]/}"
VERSION_SUFFIX="${{ github.event.inputs.version_suffix }}" VERSION_SUFFIX="${{ inputs.version_suffix }}"
VERSION_SUFFIX="${VERSION_SUFFIX//[[:space:]]/}" VERSION_SUFFIX="${VERSION_SUFFIX//[[:space:]]/}"
if [[ ! -d "$TARGET_FOLDER" ]]; then if [[ ! -d "$TARGET_FOLDER" ]]; then
@@ -149,52 +159,40 @@ jobs:
zip -r "../$ZIP_PATH" . \ zip -r "../$ZIP_PATH" . \
-x "*.DS_Store" \ -x "*.DS_Store" \
-x "__MACOSX/*" \ -x "__MACOSX/*" \
-x ".git/*" \
-x ".github/*" \
-x "node_modules/*" \ -x "node_modules/*" \
-x "coverage/*" \ -x "coverage/*" \
-x "*.log" \ -x "*.log" \
-x "*.tmp" -x "*.tmp"
echo "ZIP_NAME=$ZIP_NAME" >> "$GITHUB_ENV" cd - >/dev/null 2>&1
echo "ZIP_PATH=$ZIP_PATH" >> "$GITHUB_ENV"
SHA_PATH="${ZIP_PATH}.sha256"
sha256sum "$ZIP_PATH" | awk '{print $1}' > "$SHA_PATH"
echo "ZIP_NAME=$ZIP_NAME" >> "$GITHUB_ENV" echo "ZIP_NAME=$ZIP_NAME" >> "$GITHUB_ENV"
echo "ZIP_PATH=$ZIP_PATH" >> "$GITHUB_ENV" echo "ZIP_PATH=$ZIP_PATH" >> "$GITHUB_ENV"
- 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"
elif [[ "$UNZIP_AVAILABLE" == "true" ]]; then
unzip -Z1 "$ZIP_PATH" > "$MANIFEST_PATH"
else
echo "ERROR: Neither zipinfo nor unzip is available to generate a manifest" >&2
exit 1
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" echo "SHA_PATH=$SHA_PATH" >> "$GITHUB_ENV"
- name: Upload build artifacts - name: Export artifact metadata
id: meta
shell: bash
run: |
set -euo pipefail
echo "zip_artifact_name=$ZIP_NAME" >> "$GITHUB_OUTPUT"
echo "sha_artifact_name=${ZIP_NAME}.sha256" >> "$GITHUB_OUTPUT"
echo "zip_file_name=$ZIP_NAME" >> "$GITHUB_OUTPUT"
echo "sha_file_name=$(basename "$SHA_PATH")" >> "$GITHUB_OUTPUT"
- name: Upload ZIP artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: packaged-folder name: ${{ env.ZIP_NAME }}
path: | path: ${{ env.ZIP_PATH }}
${{ env.ZIP_PATH }}
${{ env.MANIFEST_PATH }} - name: Upload SHA256 artifact
${{ env.SHA_PATH }} uses: actions/upload-artifact@v4
with:
name: ${{ env.ZIP_NAME }}.sha256
path: ${{ env.SHA_PATH }}