name: Build Pack on: workflow_dispatch: inputs: tag: description: Tag to Checkout and Release. required: false type: string release_type: description: The Release Type. required: true type: choice default: 'Release' options: - 'Release' - 'Beta Release' - 'Alpha Release' - 'Cutting Edge Build' changelog_url: description: Where to download the Changelog File from. See CONTRIBUTING.md for more information. required: false type: string changelog_cf_url: description: Where to download the CF Changelog File from. See CONTRIBUTING.md for more information. required: false type: string changelog_branch: description: Branch to download changelog Files from. See CONTRIBUTING.md for more information. required: false type: string compare_tag: description: Tag(s) to compare against. If specifying multiple, seperate by commas. (Spaces allowed). See CONTRIBUTING.md for more information. required: false type: string separate_upload: description: Whether to uploaed each zip (Client, Server, Lang) and the changelogs seperately. If not set, will just upload all six files into one artifact (Built Pack). required: true type: boolean workflow_call: inputs: tag: description: Tag to Checkout and Release. required: false type: string release_type: description: The Release Type. required: false default: Release type: string changelog_url: description: Where to download the Changelog File from. See CONTRIBUTING.md for more information. required: false type: string changelog_cf_url: description: Where to download the CF Changelog File from. See CONTRIBUTING.md for more information. required: false type: string changelog_branch: description: Branch to download changelog Files from. See CONTRIBUTING.md for more information. required: false type: string compare_tag: description: Tag to compare to. See CONTRIBUTING.md for more information. required: false type: string separate_upload: description: Whether to uploaed each zip (Client, Server & Lang) and the changelogs seperately. If not set, will just upload all five files into one artifact (Built Pack). required: false default: false type: boolean head_ref: type: string required: false true_sha: type: string required: false jobs: buildSingle: name: Build Pack (${{ inputs.tag }}) runs-on: ubuntu-latest if: ${{ !inputs.separate_upload }} env: GITHUB_TAG: ${{ inputs.tag }} RELEASE_TYPE: ${{ inputs.release_type }} GITHUB_HEAD_REF: ${{ inputs.head_ref }} TRUE_SHA: ${{ inputs.true_sha }} steps: - name: Checkout Ref uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ inputs.tag }} - name: Restore Cached Files uses: actions/cache@v4 id: cache with: path: | ~/.npm ./.cache ./tools/node_modules key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} restore-keys: ${{ runner.os }}-bunny- - name: Setup NodeJS v16 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools run: npx gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} CURSEFORGE_API_TOKEN: ${{ secrets.CURSEFORGE_API_TOKEN }} CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} - name: Build and Zip Pack working-directory: ./tools run: npx gulp env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} CHANGELOG_BRANCH: ${{ inputs.changelog_branch }} CHANGELOG_URL: ${{ inputs.changelog_url }} CHANGELOG_CF_URL: ${{ inputs.changelog_cf_url }} COMPARE_TAG: ${{ inputs.compare_tag }} - name: Upload All Files uses: actions/upload-artifact@v4 with: name: Built Pack path: | ./build/*.zip ./build/*.md if-no-files-found: error compression-level: 0 makeNames: name: Make Artifact Names (${{ inputs.tag }}) runs-on: ubuntu-latest if: ${{ inputs.separate_upload }} env: GITHUB_TAG: ${{ inputs.tag }} RELEASE_TYPE: ${{ inputs.release_type }} GITHUB_HEAD_REF: ${{ inputs.head_ref }} TRUE_SHA: ${{ inputs.true_sha }} outputs: client: ${{ steps.artifactNames.outputs.client }} server: ${{ steps.artifactNames.outputs.server }} lang: ${{ steps.artifactNames.outputs.lang }} mmc: ${{ steps.artifactNames.outputs.mmc }} steps: - name: Checkout Ref uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ inputs.tag }} - name: Restore Cached Files uses: actions/cache@v4 id: cache with: path: | ~/.npm ./.cache ./tools/node_modules key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} restore-keys: ${{ runner.os }}-bunny- - name: Setup NodeJS v16 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools run: npx gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} CURSEFORGE_API_TOKEN: ${{ secrets.CURSEFORGE_API_TOKEN }} CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} - name: Make Artifact Names id: artifactNames working-directory: ./tools run: npx gulp makeArtifactNames buildClient: name: Build Pack Client (${{ inputs.tag }}) runs-on: ubuntu-latest if: ${{ inputs.separate_upload }} needs: makeNames env: GITHUB_TAG: ${{ inputs.tag }} RELEASE_TYPE: ${{ inputs.release_type }} GITHUB_HEAD_REF: ${{ inputs.head_ref }} TRUE_SHA: ${{ inputs.true_sha }} steps: - name: Checkout Ref uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ inputs.tag }} - name: Restore Cached Files uses: actions/cache@v4 id: cache with: path: | ~/.npm ./.cache ./tools/node_modules key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} restore-keys: ${{ runner.os }}-bunny- - name: Setup NodeJS v16 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools run: npx gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} CURSEFORGE_API_TOKEN: ${{ secrets.CURSEFORGE_API_TOKEN }} CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} - name: Build Client working-directory: ./tools run: npx gulp buildClient env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} CHANGELOG_BRANCH: ${{ inputs.changelog_branch }} CHANGELOG_URL: ${{ inputs.changelog_url }} CHANGELOG_CF_URL: ${{ inputs.changelog_cf_url }} COMPARE_TAG: ${{ inputs.compare_tag }} - name: Upload Client Zip uses: actions/upload-artifact@v4 with: name: ${{ needs.makeNames.outputs.client }} path: ./build/client/**/* if-no-files-found: error compression-level: 9 buildServer: name: Build Pack Server (${{ inputs.tag }}) runs-on: ubuntu-latest if: ${{ inputs.separate_upload }} needs: makeNames env: GITHUB_TAG: ${{ inputs.tag }} RELEASE_TYPE: ${{ inputs.release_type }} GITHUB_HEAD_REF: ${{ inputs.head_ref }} TRUE_SHA: ${{ inputs.true_sha }} steps: - name: Checkout Ref uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ inputs.tag }} - name: Restore Cached Files uses: actions/cache@v4 id: cache with: path: | ~/.npm ./.cache ./tools/node_modules key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} restore-keys: ${{ runner.os }}-bunny- - name: Setup NodeJS v16 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools run: npx gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} CURSEFORGE_API_TOKEN: ${{ secrets.CURSEFORGE_API_TOKEN }} CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} - name: Build Server working-directory: ./tools run: npx gulp buildServer env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} CHANGELOG_BRANCH: ${{ inputs.changelog_branch }} CHANGELOG_URL: ${{ inputs.changelog_url }} CHANGELOG_CF_URL: ${{ inputs.changelog_cf_url }} COMPARE_TAG: ${{ inputs.compare_tag }} - name: Upload Server Zip uses: actions/upload-artifact@v4 with: name: ${{ needs.makeNames.outputs.server }} path: ./build/server/**/* if-no-files-found: error compression-level: 9 buildLang: name: Build Pack Lang and Changelogs (${{ inputs.tag }}) runs-on: ubuntu-latest if: ${{ inputs.separate_upload }} needs: makeNames env: GITHUB_TAG: ${{ inputs.tag }} RELEASE_TYPE: ${{ inputs.release_type }} GITHUB_HEAD_REF: ${{ inputs.head_ref }} TRUE_SHA: ${{ inputs.true_sha }} steps: - name: Checkout Ref uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ inputs.tag }} - name: Restore Cached Files uses: actions/cache@v4 id: cache with: path: | ~/.npm ./.cache ./tools/node_modules key: ${{ runner.os }}-bunny-${{ hashFiles('**/.cache', '**/package-lock.json', '**/manifest.json') }} restore-keys: ${{ runner.os }}-bunny- - name: Setup NodeJS v16 uses: actions/setup-node@v4 with: node-version: 20 check-latest: true - name: Setup NPM Packages working-directory: ./tools run: npm ci - name: Check Environmental Variables working-directory: ./tools run: npx gulp check env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CURSEFORGE_PROJECT_ID: ${{ secrets.CURSEFORGE_PROJECT_ID }} CURSEFORGE_API_TOKEN: ${{ secrets.CURSEFORGE_API_TOKEN }} CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} - name: Build Lang and Changelogs working-directory: ./tools run: npx gulp buildLang env: CFCORE_API_TOKEN: ${{ secrets.CFCORE_API_TOKEN }} CHANGELOG_BRANCH: ${{ inputs.changelog_branch }} CHANGELOG_URL: ${{ inputs.changelog_url }} CHANGELOG_CF_URL: ${{ inputs.changelog_cf_url }} COMPARE_TAG: ${{ inputs.compare_tag }} - name: Upload Lang Zip uses: actions/upload-artifact@v4 with: name: ${{ needs.makeNames.outputs.lang }} path: ./build/lang/**/* if-no-files-found: error compression-level: 9 - name: Upload Changelogs uses: actions/upload-artifact@v4 with: name: Changelogs path: ./build/*.md if-no-files-found: error compression-level: 9