Update build_zip.yml
This commit is contained in:
99
.github/workflows/build_zip.yml
vendored
99
.github/workflows/build_zip.yml
vendored
@@ -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 }}
|
||||
|
||||
Reference in New Issue
Block a user