From 53c4c669588fe9f0f3c8eba881ea4a92326e345f Mon Sep 17 00:00:00 2001 From: jalensailin Date: Fri, 29 Aug 2025 00:09:58 -0400 Subject: [PATCH] Generalize buildPacks for reusability --- .github/actions/build-packs/action.yml | 11 +++++ .github/workflows/publish-prod-release.yml | 55 ++++++++++------------ build/build-packs.sh | 10 ++++ 3 files changed, 47 insertions(+), 29 deletions(-) create mode 100644 .github/actions/build-packs/action.yml create mode 100755 build/build-packs.sh diff --git a/.github/actions/build-packs/action.yml b/.github/actions/build-packs/action.yml new file mode 100644 index 0000000..ec50a58 --- /dev/null +++ b/.github/actions/build-packs/action.yml @@ -0,0 +1,11 @@ +name: "Build Compendium Packs" +description: "Builds the compendium pack binaries from source JSON files" +runs: + using: "composite" + steps: + - name: Node Setup + uses: ./.github/actions/setup-node + + - name: Build Compendium Packs + run: ./build/build-packs.sh + shell: bash diff --git a/.github/workflows/publish-prod-release.yml b/.github/workflows/publish-prod-release.yml index 783d113..1bb64bc 100644 --- a/.github/workflows/publish-prod-release.yml +++ b/.github/workflows/publish-prod-release.yml @@ -1,59 +1,52 @@ # This is a basic workflow that is manually triggered -name: Build Packs +name: Release # Controls when the action will run. Workflow runs when release is published. on: release: types: [published] +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: write + # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called buildPacks - buildPacks: + release: # The type of runner that the job will run on. This must be ubuntu for the zip command to work. runs-on: ubuntu-latest - # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Each step runs a single command using the runners shell. - # 1. Checkout our repository so we can do things on it. - name: Checkout uses: actions/checkout@v4 - # 2. Make sure node is set up. This may be an unecessary step. - - name: Node Setup - uses: actions/setup-node@v3 - with: - node-version: 18 - # 3. Install the FoundryVTT CLI. - - run: npm install -g @foundryvtt/foundryvtt-cli - # 4. Configure the datapath as the github workspace variable. - - run: fvtt configure set "dataPath" ${GITHUB_WORKSPACE} - # 5. Tell the FVTT CLI that we are working on a "system" package. - - run: fvtt package workon fvtt package workon "deltagreen" --type "System" - # 6-11. Package each folder of source json files into the appropriate LevelDB pack. - - run: fvtt package pack "armor" --in "packs/source/armor" --out "packs" - - run: fvtt package pack "firearms" --in "packs/source/firearms" --out "packs" - - run: fvtt package pack "hand-to-hand-weapons" --in "packs/source/hand-to-hand-weapons" --out "packs" - - run: fvtt package pack "operation-code-name-generator" --in "packs/source/operation-code-name-generator" --out "packs" - - run: fvtt package pack "operation-code-name-generator-macro" --in "packs/source/operation-code-name-generator-macro" --out "packs" - - run: fvtt package pack "pregens" --in "packs/source/pregens" --out "packs" - # 12. Get the version number without the leading -v. + + - name: Build Packs + uses: ./.github/actions/build-packs + - name: Get Version id: get_version uses: dhkatz/get-version-action@v3.0.0 - # 13. Substitute the Manifest and Download URLs in the system.json + - name: Substitute Manifest, Download Links For Versioned Ones uses: TomaszKandula/variable-substitution@v1.0.1 with: files: "system.json" env: + flags: "" version: ${{steps.get_version.outputs.version-without-v}} download: https://github.com/${{github.repository}}/releases/download/${{github.event.release.tag_name}}/deltagreen.zip - # 14. Zip up the branch with the LevelDB packs. + - name: Zip - # Exclude the source json files from the final package, as well as any git folders. - run: zip -r deltagreen.zip . --exclude="*packs/source/*" --exclude=".*" --exclude="package-lock.json" --exclude="package.json" - # 15. Updates the release with the newly zipped branch. See documentation of this action for details. + run: | + zip -r deltagreen.zip . \ + -x "packs/source/*" \ + -x "build/*" \ + -x ".*" \ + -x "package.json" \ + -x "package-lock.json" \ + -x "node_modules/*" + - name: Update Release with Artifacts uses: ncipollo/release-action@v1.13.0 with: @@ -63,3 +56,7 @@ jobs: body: ${{ github.event.release.body }} artifacts: "./deltagreen.zip, ./system.json" token: ${{ secrets.GITHUB_TOKEN }} + +defaults: + run: + shell: bash diff --git a/build/build-packs.sh b/build/build-packs.sh new file mode 100755 index 0000000..3bd8ef8 --- /dev/null +++ b/build/build-packs.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +npx --no-install fvtt package workon "deltagreen" --type "System" + +for folder in packs/source/*; do + name=$(basename $folder) + npx --no-install fvtt package pack "$name" --in "$folder" --out "packs" +done