From 88c3f68b25bc0f4d8c0c4c4ea68d6240af282b99 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <230051081+jmiller-moko@users.noreply.github.com> Date: Tue, 16 Dec 2025 19:21:34 -0600 Subject: [PATCH] Update build_zip.yml --- .github/workflows/build_zip.yml | 100 ++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/.github/workflows/build_zip.yml b/.github/workflows/build_zip.yml index 9cceaf2..e5589ca 100644 --- a/.github/workflows/build_zip.yml +++ b/.github/workflows/build_zip.yml @@ -33,6 +33,37 @@ on: required: false type: string default: "" + publish_release: + description: "If true, upload ZIP and SHA256 as GitHub Release assets" + required: false + type: boolean + default: false + release_tag: + description: "Release tag to publish to (required if publish_release=true)" + required: false + type: string + default: "" + prerelease: + description: "If true, mark the release as prerelease" + required: false + type: boolean + default: false + 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 }} + release_uploaded: + description: "true if assets were uploaded to a release" + value: ${{ jobs.zip.outputs.release_uploaded }} outputs: zip_artifact_name: description: "Artifact name for the ZIP" @@ -49,6 +80,7 @@ on: permissions: contents: read + contents: write jobs: zip: @@ -60,6 +92,7 @@ jobs: 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 }} + release_uploaded: ${{ steps.release_upload.outputs.release_uploaded }} steps: - name: Checkout repository @@ -88,6 +121,51 @@ jobs: TARGET_FOLDER="${{ inputs.target_folder }}" ZIP_NAME_INPUT="${{ inputs.zip_name }}" VERSION_SUFFIX="${{ inputs.version_suffix }}" + PUBLISH_RELEASE="${{ inputs.publish_release }}" + RELEASE_TAG="${{ inputs.release_tag }}" + + if [[ -z "$TARGET_FOLDER" ]]; then + TARGET_FOLDER="${{ github.event.inputs.target_folder }}" + fi + if [[ -z "$ZIP_NAME_INPUT" ]]; then + ZIP_NAME_INPUT="${{ github.event.inputs.zip_name }}" + fi + if [[ -z "$VERSION_SUFFIX" ]]; then + VERSION_SUFFIX="${{ github.event.inputs.version_suffix }}" + fi + + TARGET_FOLDER="${TARGET_FOLDER//[[:space:]]/}" + ZIP_NAME_INPUT="${ZIP_NAME_INPUT//[[:space:]]/}" + VERSION_SUFFIX="${VERSION_SUFFIX//[[:space:]]/}" + + if [[ -z "$TARGET_FOLDER" ]]; then + TARGET_FOLDER="src" + fi + + 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 + + if [[ -n "$ZIP_NAME_INPUT" ]]; then + ZIP_NAME_INPUT="$(echo "$ZIP_NAME_INPUT" | tr '[:upper:]' '[:lower:]')" + fi + + if [[ "$PUBLISH_RELEASE" == "true" ]] && [[ -z "$RELEASE_TAG" ]]; then + echo "ERROR: release_tag is required when publish_release=true" >&2 + exit 1 + fi + + echo "TARGET_FOLDER=$TARGET_FOLDER" >> "$GITHUB_ENV" + echo "INPUT_ZIP_NAME=$ZIP_NAME_INPUT" >> "$GITHUB_ENV" + echo "INPUT_VERSION_SUFFIX=$VERSION_SUFFIX" >> "$GITHUB_ENV" + echo "PUBLISH_RELEASE=$PUBLISH_RELEASE" >> "$GITHUB_ENV" + echo "RELEASE_TAG=$RELEASE_TAG" >> "$GITHUB_ENV" if [[ -z "$TARGET_FOLDER" ]]; then TARGET_FOLDER="${{ github.event.inputs.target_folder }}" @@ -222,3 +300,25 @@ jobs: with: name: ${{ env.ZIP_NAME }}.sha256 path: ${{ env.SHA_PATH }} + + - name: Upload assets to GitHub Release + id: release_upload + if: ${{ env.PUBLISH_RELEASE == 'true' }} + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ env.RELEASE_TAG }} + prerelease: ${{ inputs.prerelease }} + files: | + ${{ env.ZIP_PATH }} + ${{ env.SHA_PATH }} + + - name: Export release upload status + id: release_upload_status + shell: bash + run: | + set -euo pipefail + if [[ "$PUBLISH_RELEASE" == "true" ]]; then + echo "release_uploaded=true" >> "$GITHUB_OUTPUT" + else + echo "release_uploaded=false" >> "$GITHUB_OUTPUT" + fi