Skip to content

v4.15.0 - Winter '25 Release (API v62.0) #917

v4.15.0 - Winter '25 Release (API v62.0)

v4.15.0 - Winter '25 Release (API v62.0) #917

Workflow file for this run

# Pipeline for Nebula Logger
name: Build
env:
SF_DISABLE_AUTOUPDATE: true
SF_LOG_LEVEL: debug
SF_SKIP_NEW_VERSION_CHECK: true
on:
push:
branches:
- main
paths:
- .github/workflows/**
- config/scratch-orgs/**
- nebula-logger/**
- sfdx-project.json
pull_request:
types: [opened, synchronize, reopened]
paths:
- .github/workflows/**
- config/scratch-orgs/**
- nebula-logger/**
- sfdx-project.json
jobs:
code-quality-tests:
name: 'Run Code Quality Tests'
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Check for changes in core directory'
uses: dorny/paths-filter@v3
id: changes
with:
filters: |
core:
- './nebula-logger/core/**'
- name: 'Authorize Dev Hub'
if: ${{ (github.event_name == 'pull_request') && (github.event.pull_request.draft == false) && (steps.changes.outputs.core == 'true') }}
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Verify package version number is updated'
if: ${{ (github.event_name == 'pull_request') && (github.event.pull_request.draft == false) && (steps.changes.outputs.core == 'true') }}
run: npm run package:version:number:verify
- name: 'Verify LWC with ESLint'
run: npm run scan:lwc
- name: 'Verify Apex with SFDX Scanner'
run: |
npm run sf:plugins:link:scanner
npm run scan:apex
# TODO - uncomment - temporarily commented-out due to an issue with apexdocs in the pipeline
# - name: 'Verify docs are updated'
# run: npm run docs:verify
- name: 'Verify formatting with Prettier'
run: npm run prettier:verify
lwc-jest-tests:
name: 'Run LWC Jest Tests'
needs: [code-quality-tests]
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Run LWC Tests'
run: npm run test:lwc
- name: 'Upload LWC code coverage to Codecov.io'
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
flags: LWC
token: ${{ secrets.CODECOV_TOKEN }}
advanced-scratch-org-tests:
environment: 'Advanced Scratch Org'
name: 'Run Advanced Scratch Org Tests'
needs: [code-quality-tests]
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Create Scratch Org'
run: npx sf org create scratch --no-namespace --no-track-source --duration-days 1 --definition-file ./config/scratch-orgs/advanced-scratch-def.json --wait 20 --set-default --json
# https://help.salesforce.com/s/articleView?id=000394906&type=1
- name: 'Install OmniStudio managed package v250.7.1 (Summer ‘24 release)'
run: npx sf package install --package 04t4W000002Z6oC --security-type AdminsOnly --wait 30 --no-prompt
# To ensure that all of the Apex classes in the core directory have 75+ code coverage,
# deploy only the core directory & run all of its tests as part of the deployment, using `--test-level RunLocalTests`
- name: 'Validate Core Source in Scratch Org'
run: npx sf project deploy validate --source-dir ./nebula-logger/core/ --test-level RunLocalTests
# Now that the core directory has been deployed & tests have passed, deploy all of the metadata
- name: 'Deploy All Source to Scratch Org'
run: npx sf project deploy start --source-dir ./nebula-logger/
- name: 'Deploy Test Metadata'
run: npx sf project deploy start --source-dir ./config/scratch-orgs/
- name: 'Assign Logger Admin Permission Set'
run: npm run permset:assign:admin
- name: 'Validate Custom Metadata Records'
run: npx sf apex run --file ./scripts/build/validate-custom-metadata-records.apex
# Nebula Logger has functionality that queries the AuthSession object when the current user has an active session.
# The code should work with or without an active session, so the pipeline runs the tests twice - asynchronously and synchronously.
# This is done because, based on how you execute Apex tests, the running user may have an active session (synchrously) or not (asynchronously).
# Ultimately, this could/should probably be better mocked during tests, but the AuthSession is read-only in Apex, so it's a bit difficult to work with.
# Running the Apex tests sync & async serves as an extra level of integration testing to ensure that everything works with or without an active session.
- name: 'Run Apex Tests Asynchronously'
run: npm run test:apex:nocoverage
- name: 'Run Apex Tests Synchronously'
run: npm run test:apex -- --synchronous
# This is the only scratch org that's used for uploading code coverage
- name: 'Upload Apex test code coverage to Codecov.io'
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
flags: Apex
token: ${{ secrets.CODECOV_TOKEN }}
- name: 'Delete Scratch Org'
run: npx sf org delete scratch --no-prompt
if: ${{ always() }}
base-scratch-org-tests:
environment: 'Base Scratch Org'
name: 'Run Base Scratch Org Tests'
needs: [code-quality-tests]
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Create Scratch Org'
run: npx sf org create scratch --no-namespace --no-track-source --duration-days 1 --definition-file ./config/scratch-orgs/base-scratch-def.json --wait 20 --set-default --json
# To ensure that all of the Apex classes in the core directory have 75+ code coverage,
# deploy only the core directory & run all of its tests as part of the deployment, using `--test-level RunLocalTests`
- name: 'Validate Core Source in Scratch Org'
run: npx sf project deploy validate --source-dir ./nebula-logger/core/ --test-level RunLocalTests
# Now that the core directory has been deployed & tests have passed, deploy all of the metadata
- name: 'Deploy All Source to Scratch Org'
run: npx sf project deploy start --source-dir ./nebula-logger/
- name: 'Assign Logger Admin Permission Set'
run: npm run permset:assign:admin
- name: 'Validate Custom Metadata Records'
run: npx sf apex run --file ./scripts/build/validate-custom-metadata-records.apex
# Nebula Logger has functionality that queries the AuthSession object when the current user has an active session.
# The code should work with or without an active session, so the pipeline runs the tests twice - asynchronously and synchronously.
# This is done because, based on how you execute Apex tests, the running user may have an active session (synchrously) or not (asynchronously).
# Ultimately, this could/should probably be better mocked during tests, but the AuthSession is read-only in Apex, so it's a bit difficult to work with.
# Running the Apex tests sync & async serves as an extra level of integration testing to ensure that everything works with or without an active session.
- name: 'Run Apex Tests Asynchronously'
run: npm run test:apex:nocoverage
- name: 'Run Apex Tests Synchronously'
run: npm run test:apex:nocoverage -- --synchronous
- name: 'Delete Scratch Org'
run: npx sf org delete scratch --no-prompt
if: ${{ always() }}
event-monitoring-scratch-org-tests:
environment: 'Event Monitoring Scratch Org'
name: 'Run Event Monitoring Scratch Org Tests'
needs: [code-quality-tests]
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Create Scratch Org'
run: npx sf org create scratch --no-namespace --no-track-source --duration-days 1 --definition-file ./config/scratch-orgs/event-monitoring-scratch-def.json --wait 20 --set-default --json
# To ensure that all of the Apex classes in the core directory have 75+ code coverage,
# deploy only the core directory & run all of its tests as part of the deployment, using `--test-level RunLocalTests`
- name: 'Validate Core Source in Scratch Org'
run: npx sf project deploy validate --source-dir ./nebula-logger/core/ --test-level RunLocalTests
# Now that the core directory has been deployed & tests have passed, deploy all of the metadata
- name: 'Deploy All Source to Scratch Org'
run: npx sf project deploy start --source-dir ./nebula-logger/
- name: 'Assign Logger Admin Permission Set'
run: npm run permset:assign:admin
- name: 'Validate Custom Metadata Records'
run: npx sf apex run --file ./scripts/build/validate-custom-metadata-records.apex
# Nebula Logger has functionality that queries the AuthSession object when the current user has an active session.
# The code should work with or without an active session, so the pipeline runs the tests twice - asynchronously and synchronously.
# This is done because, based on how you execute Apex tests, the running user may have an active session (synchrously) or not (asynchronously).
# Ultimately, this could/should probably be better mocked during tests, but the AuthSession is read-only in Apex, so it's a bit difficult to work with.
# Running the Apex tests sync & async serves as an extra level of integration testing to ensure that everything works with or without an active session.
- name: 'Run Apex Tests Asynchronously'
run: npm run test:apex:nocoverage
- name: 'Run Apex Tests Synchronously'
run: npm run test:apex:nocoverage -- --synchronous
- name: 'Delete Scratch Org'
run: npx sf org delete scratch --no-prompt
if: ${{ always() }}
experience-cloud-scratch-org-tests:
environment: 'Experience Cloud Scratch Org'
name: 'Run Experience Cloud Scratch Org Tests'
needs: [code-quality-tests, advanced-scratch-org-tests]
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Create Scratch Org'
run: npx sf org create scratch --no-namespace --no-track-source --duration-days 1 --definition-file ./config/scratch-orgs/experience-cloud-scratch-def.json --wait 20 --set-default --json
# To ensure that all of the Apex classes in the core directory have 75+ code coverage,
# deploy only the core directory & run all of its tests as part of the deployment, using `--test-level RunLocalTests`
- name: 'Validate Core Source in Scratch Org'
run: npx sf project deploy validate --source-dir ./nebula-logger/core/ --test-level RunLocalTests
# Now that the core directory has been deployed & tests have passed, deploy all of the metadata
- name: 'Deploy All Source to Scratch Org'
run: npx sf project deploy start --source-dir ./nebula-logger/
- name: 'Deploy Test Experience Sites Metadata'
run: npx sf project deploy start --source-dir ./config/scratch-orgs/experience-cloud/
- name: 'Assign Logger Admin Permission Set'
run: npm run permset:assign:admin
- name: 'Validate Custom Metadata Records'
run: npx sf apex run --file ./scripts/build/validate-custom-metadata-records.apex
# Nebula Logger has functionality that queries the AuthSession object when the current user has an active session.
# The code should work with or without an active session, so the pipeline runs the tests twice - asynchronously and synchronously.
# This is done because, based on how you execute Apex tests, the running user may have an active session (synchrously) or not (asynchronously).
# Ultimately, this could/should probably be better mocked during tests, but the AuthSession is read-only in Apex, so it's a bit difficult to work with.
# Running the Apex tests sync & async serves as an extra level of integration testing to ensure that everything works with or without an active session.
- name: 'Run Apex Tests Asynchronously'
run: npm run test:apex:nocoverage
- name: 'Run Apex Tests Synchronously'
run: npm run test:apex:nocoverage -- --synchronous
- name: 'Delete Scratch Org'
run: npx sf org delete scratch --no-prompt
if: ${{ always() }}
omnistudio-scratch-org-tests:
environment: 'OmniStudio Scratch Org'
name: 'Run OmniStudio Scratch Org Tests'
needs: [code-quality-tests, base-scratch-org-tests]
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Create Scratch Org'
run: npx sf org create scratch --no-namespace --no-track-source --duration-days 1 --definition-file ./config/scratch-orgs/omnistudio-scratch-def.json --wait 20 --set-default --json
# https://help.salesforce.com/s/articleView?id=000394906&type=1
- name: 'Install OmniStudio managed package v250.7.1 (Summer ‘24 release)'
run: npx sf package install --package 04t4W000002Z6oC --security-type AdminsOnly --wait 30 --no-prompt
# To ensure that all of the Apex classes in the core directory have 75+ code coverage,
# deploy only the core directory & run all of its tests as part of the deployment, using `--test-level RunLocalTests`
- name: 'Validate Core Source in Scratch Org'
run: npx sf project deploy validate --source-dir ./nebula-logger/core/ --test-level RunLocalTests
# Now that the core directory has been deployed & tests have passed, deploy all of the metadata
- name: 'Deploy All Source to Scratch Org'
run: npx sf project deploy start --source-dir ./nebula-logger/
- name: 'Deploy Test OmniStudio Metadata'
run: npx sf project deploy start --source-dir ./config/scratch-orgs/omnistudio/
- name: 'Assign Logger Admin Permission Set'
run: npm run permset:assign:admin
- name: 'Validate Custom Metadata Records'
run: npx sf apex run --file ./scripts/build/validate-custom-metadata-records.apex
# Nebula Logger has functionality that queries the AuthSession object when the current user has an active session.
# The code should work with or without an active session, so the pipeline runs the tests twice - asynchronously and synchronously.
# This is done because, based on how you execute Apex tests, the running user may have an active session (synchrously) or not (asynchronously).
# Ultimately, this could/should probably be better mocked during tests, but the AuthSession is read-only in Apex, so it's a bit difficult to work with.
# Running the Apex tests sync & async serves as an extra level of integration testing to ensure that everything works with or without an active session.
- name: 'Run Apex Tests Asynchronously'
run: npm run test:apex:nocoverage
- name: 'Run Apex Tests Synchronously'
run: npm run test:apex:nocoverage -- --synchronous
- name: 'Delete Base Scratch Org'
run: npx sf org delete scratch --no-prompt
if: ${{ always() }}
platform-cache-scratch-org-tests:
environment: 'Platform Cache Scratch Org'
name: 'Run Platform Cache Scratch Org Tests'
needs: [code-quality-tests, event-monitoring-scratch-org-tests]
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Create Scratch Org'
run: npx sf org create scratch --no-namespace --no-track-source --duration-days 1 --definition-file ./config/scratch-orgs/platform-cache-scratch-def.json --wait 20 --set-default --json
# To ensure that all of the Apex classes in the core directory have 75+ code coverage,
# deploy only the core directory & run all of its tests as part of the deployment, using `--test-level RunLocalTests`
- name: 'Validate Core Source in Scratch Org'
run: npx sf project deploy validate --source-dir ./nebula-logger/core/ --test-level RunLocalTests
# Now that the core directory has been deployed & tests have passed, deploy all of the metadata
- name: 'Deploy All Source to Scratch Org'
run: npx sf project deploy start --source-dir ./nebula-logger/
- name: 'Assign Logger Admin Permission Set'
run: npm run permset:assign:admin
- name: 'Validate Custom Metadata Records'
run: npx sf apex run --file ./scripts/build/validate-custom-metadata-records.apex
# Nebula Logger has functionality that queries the AuthSession object when the current user has an active session.
# The code should work with or without an active session, so the pipeline runs the tests twice - asynchronously and synchronously.
# This is done because, based on how you execute Apex tests, the running user may have an active session (synchrously) or not (asynchronously).
# Ultimately, this could/should probably be better mocked during tests, but the AuthSession is read-only in Apex, so it's a bit difficult to work with.
# Running the Apex tests sync & async serves as an extra level of integration testing to ensure that everything works with or without an active session.
- name: 'Run Apex Tests Asynchronously'
run: npm run test:apex:nocoverage
- name: 'Run Apex Tests Synchronously'
run: npm run test:apex:nocoverage -- --synchronous
- name: 'Delete Scratch Org'
run: npx sf org delete scratch --no-prompt
if: ${{ always() }}
create-managed-package-beta:
name: 'Create Managed Package Beta'
needs:
[
code-quality-tests,
lwc-jest-tests,
advanced-scratch-org-tests,
base-scratch-org-tests,
event-monitoring-scratch-org-tests,
experience-cloud-scratch-org-tests,
omnistudio-scratch-org-tests,
platform-cache-scratch-org-tests
]
if: ${{ github.ref != 'refs/heads/main' }}
runs-on: ubuntu-latest
environment: 'Demo Org'
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Create Beta Managed Package Version'
run: npm run package:version:create:managed
create-unlocked-package-release-candidate:
name: 'Create Core Package Release Candidate'
needs: [create-managed-package-beta]
if: ${{ github.ref != 'refs/heads/main' }}
runs-on: ubuntu-latest
environment: 'Demo Org'
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Authorize Demo Org'
shell: bash
run: |
echo ${{ env.PKG_DEMO_ORG_SFDX_URL }} > ./PKG_DEMO_ORG_SFDX_URL.txt
npx sf org login sfdx-url --sfdx-url-file ./PKG_DEMO_ORG_SFDX_URL.txt --alias nebula-logger-package-demo
env:
PKG_DEMO_ORG_SFDX_URL: ${{ secrets.NEBULA_PKG_DEMO_SANDBOX_SFDX_URL }}
- name: 'Create & Install Package Version'
run: npx pwsh ./scripts/build/create-and-install-package-version.ps1 -targetpackagealias '"Nebula Logger - Core"' -targetreadme ./README.md -targetusername nebula-logger-package-demo
# Nebula Logger has functionality that queries the AuthSession object when the current user has an active session.
# The code should work with or without an active session, so the pipeline runs the tests twice - asynchronously and synchronously.
# This is done because, based on how you execute Apex tests, the running user may have an active session (synchrously) or not (asynchronously).
# Ultimately, this could/should probably be better mocked during tests, but the AuthSession is read-only in Apex, so it's a bit difficult to work with.
# Running the Apex tests sync & async serves as an extra level of integration testing in the meantime to ensure that everything works with or without an active session.
- name: 'Run Apex Tests Asynchronously'
run: npm run test:apex:nocoverage -- --targetusername nebula-logger-package-demo
- name: 'Run Apex Tests Synchronously'
run: npm run test:apex:nocoverage -- --targetusername nebula-logger-package-demo --synchronous
- name: 'Commit New Package Version'
if: ${{ github.event_name == 'pull_request' }}
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action Bot"
# npm run sf:plugins:link:bummer
echo y | npx sf plugins install @jongpie/sfdx-bummer-plugin --force
npx sf bummer:package:aliases:sort
npx prettier --write ./sfdx-project.json
git add ./sfdx-project.json
git commit -m "Created new core unlocked package version"
git push
promote-package-versions:
name: 'Promote Package Versions'
needs:
[
code-quality-tests,
lwc-jest-tests,
advanced-scratch-org-tests,
base-scratch-org-tests,
event-monitoring-scratch-org-tests,
experience-cloud-scratch-org-tests,
omnistudio-scratch-org-tests,
platform-cache-scratch-org-tests
]
if: ${{ github.ref == 'refs/heads/main' }}
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: actions/checkout@v4
- name: 'Restore node_modules cache'
id: cache-npm
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ env.cache-name }}-
npm-
- name: 'Install npm dependencies'
if: steps.cache-npm.outputs.cache-hit != 'true'
run: npm ci
- name: 'Authorize Dev Hub'
shell: bash
run: |
npx sf version
echo "${{ env.DEV_HUB_JWT_SERVER_KEY }}" > ./jwt-server.key
npx sf org login jwt --instance-url ${{ env.DEV_HUB_AUTH_URL }} --client-id ${{ env.DEV_HUB_CONSUMER_KEY }} --username ${{ env.DEV_HUB_BOT_USERNAME }} --jwt-key-file ./jwt-server.key --set-default-dev-hub
env:
DEV_HUB_AUTH_URL: ${{ secrets.DEV_HUB_AUTH_URL }}
DEV_HUB_BOT_USERNAME: ${{ secrets.DEV_HUB_BOT_USERNAME }}
DEV_HUB_CONSUMER_KEY: ${{ secrets.DEV_HUB_CONSUMER_KEY }}
DEV_HUB_JWT_SERVER_KEY: ${{ secrets.DEV_HUB_JWT_SERVER_KEY }}
- name: 'Promote package versions'
run: npx pwsh ./scripts/build/promote-readme-packages.ps1