Skip to content

Packaging

Packaging #13

Workflow file for this run

name: Packaging
on:
workflow_call:
inputs:
package:
description: Package Directory ("managed" or "unlocked")
default: "unlocked"
required: false
type: string
version:
description: Version Number (#.#.#)
required: false
type: string
workflow_dispatch:
inputs:
package:
description: Package Directory ("managed" or "unlocked")
default: "unlocked"
required: false
version:
description: Version Number (#.#.#)
required: false
jobs:
create-package-version:
name: Create Package Version
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Switch Package Context
shell: bash
run: |
# Swap the sfdx-project.json file for the one listed in the package directory
mkdir -p tmp
mv sfdx-project.json tmp/
cp "packages/${{ inputs.package }}/sfdx-project.json" .
- name: Get Version Number
id: get-version
env:
INPUT_VERSION: ${{ inputs.version }}
shell: bash
run: |
# If an input version number isn't set, use the current version defined in sfdx-project.json:
if [[ -z "$INPUT_VERSION" ]]; then
VERSION_NUMBER=$(jq -r '.packageDirectories[] | select(.default == true) | .versionNumber' sfdx-project.json)
echo "Using the version number defined in sfdx-project.json: $VERSION_NUMBER"
else
VERSION_NUMBER="${INPUT_VERSION}.NEXT"
echo "Using specified version number: $VERSION_NUMBER"
fi
echo "version-number=$VERSION_NUMBER" >> "$GITHUB_OUTPUT"
- name: Update Version Number
shell: bash
env:
VERSION_NUMBER: ${{ steps.get-version.outputs.version-number }}
run: |
# Update the version number/name in both project files:
VERSION_NAME="v$VERSION_NUMBER"
# Update the package file
jq --arg vn "$VERSION_NUMBER" --arg vnm "$VERSION_NAME" \
'.packageDirectories[0].versionNumber = $vn | .packageDirectories[0].versionName = $vnm' \
sfdx-project.json > sfdx-project.json.tmp && mv sfdx-project.json.tmp sfdx-project.json
# Update version in the original root file
jq --arg vn "$VERSION_NUMBER" --arg vnm "$VERSION_NAME" \
'.packageDirectories[0].versionNumber = $vn | .packageDirectories[0].versionName = $vnm' \
tmp/sfdx-project.json > tmp/sfdx-project.json.tmp && mv tmp/sfdx-project.json.tmp tmp/sfdx-project.json
- name: Setup SF CLI
uses: ./.github/actions/setup-sf-cli
- name: Authenticate Devhub
env:
CLIENT_ID: ${{ secrets.SALESFORCE_CONSUMER_KEY }}
JWT_KEY: ${{ secrets.SALESFORCE_JWT_KEY }}
USERNAME: ${{ secrets.SALESFORCE_DEVHUB_USERNAME }}
shell: bash
run: |
set -euo pipefail
echo "${JWT_KEY}" > server.key
sf org login jwt \
--client-id "$CLIENT_ID" \
--jwt-key-file server.key \
--set-default-dev-hub \
--username "$USERNAME"
trap 'rm -f server.key' EXIT
- name: Create New Package Version
env:
VERSION_NUMBER: ${{ steps.get-version.outputs.version-number }}
shell: bash
run: |
# Get package alias from sfdx-project.json
PACKAGE_ALIAS=$(jq -r '.packageDirectories[] | select(.default == true) | .package' sfdx-project.json)
echo "Creating package version for: $PACKAGE_ALIAS"
sf package version create \
--code-coverage \
--installation-key-bypass \
--package "$PACKAGE_ALIAS" \
--version-number "$VERSION_NUMBER" \
--wait 29
- name: Run Prettier
shell: bash
run: |
# Packaging causes project file's formatting to be overwritten
# Before committing, re-run prettier on these files:
npm install prettier
prettier -w sfdx-project.json
prettier -w tmp/sfdx-project.json
- name: Cleanup
shell: bash
run: |
# Relocate root & package's project files back to their original location
cp sfdx-project.json "packages/${{ inputs.package }}/"
mv tmp/sfdx-project.json .
rm -rf tmp/
- name: Tag & Commit Changes
uses: "stefanzweifel/git-auto-commit-action@v6"
with:
commit_message: "Packaged new ${{ inputs.package }} version v${{ steps.get-version.outputs.version-number }}"
tagging_message: "v${{ steps.get-version.outputs.version-number }}"