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)"
|
description: "Folder to zip (relative to repo root)"
|
||||||
required: false
|
required: false
|
||||||
default: "src"
|
default: "src"
|
||||||
|
version_suffix:
|
||||||
|
description: "Optional version suffix for filename (example 01.02.03)"
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
actions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
zip:
|
zip:
|
||||||
name: Package folder as ZIP
|
name: Package folder as ZIP
|
||||||
@@ -23,7 +24,28 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
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
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -33,12 +55,28 @@ jobs:
|
|||||||
TARGET_FOLDER="src"
|
TARGET_FOLDER="src"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
VERSION_SUFFIX="${{ github.event.inputs.version_suffix }}"
|
||||||
|
VERSION_SUFFIX="${VERSION_SUFFIX//[[:space:]]/}"
|
||||||
|
|
||||||
if [[ ! -d "$TARGET_FOLDER" ]]; then
|
if [[ ! -d "$TARGET_FOLDER" ]]; then
|
||||||
echo "ERROR: Folder does not exist: $TARGET_FOLDER" >&2
|
echo "ERROR: Folder does not exist: $TARGET_FOLDER" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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 "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
|
- name: Create ZIP archive
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -47,19 +85,60 @@ jobs:
|
|||||||
|
|
||||||
REPO_NAME="${GITHUB_REPOSITORY##*/}"
|
REPO_NAME="${GITHUB_REPOSITORY##*/}"
|
||||||
SAFE_FOLDER_NAME="$(echo "$TARGET_FOLDER" | tr '/' '-')"
|
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"
|
cd "$TARGET_FOLDER"
|
||||||
zip -r "../$ZIP_NAME" . \
|
|
||||||
|
zip -r "../$ZIP_PATH" . \
|
||||||
-x "*.DS_Store" \
|
-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_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
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: packaged-folder
|
name: packaged-folder
|
||||||
path: ${{ env.ZIP_NAME }}
|
path: |
|
||||||
|
${{ env.ZIP_PATH }}
|
||||||
|
${{ env.MANIFEST_PATH }}
|
||||||
|
${{ env.SHA_PATH }}
|
||||||
|
|||||||
Reference in New Issue
Block a user