Skip to content

Publish Orchestrator #1

Publish Orchestrator

Publish Orchestrator #1

name: "Publish Orchestrator"
on:
workflow_dispatch:
inputs:
version:
description: "New version to release"
required: true
npmOrgName:
description: "Organization name on npmjs.com"
required: true
default: "masayag-tests"
githubOrgName:
description: "Organization name on github.com to fetch the code"
required: true
default: "masayag"
githubRefName:
description: "Branch name on github.com to fetch the code"
required: true
default: "main"
dryRun:
description: "Dry run"
required: true
type: boolean
default: true
concurrency:
group: ${{ inputs.version }}
permissions:
contents: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout backstage-plugins
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{ inputs.githubOrgName }}/backstage-plugins
ref: ${{ inputs.githubRefName }}
fetch-depth: 0
- name: Get the commit hash
id: get_commit_hash
run: echo "commit_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "18.x"
cache: "yarn"
- name: Install dependencies
run: yarn --prefer-offline --frozen-lockfile
- name: Update the package version to ${{ inputs.version }}
run: |
echo Update version of plugins/orchestrator-common
cd plugins/orchestrator-common
current_version_common_package=$(node -p "require('./package.json').version")
yarn version --new-version ${{ inputs.version }} --no-git-tag-version
cd -
echo Update version of plugins/orchestrator
cd plugins/orchestrator
yarn version --new-version ${{ inputs.version }} --no-git-tag-version
sed -i 's/"@janus-idp\/backstage-plugin-orchestrator-common": "'"$current_version_common_package"'"/"@janus-idp\/backstage-plugin-orchestrator-common": "'${{ inputs.version }}'"/g' package.json
cd -
echo Update version of plugins/orchestrator-backend
cd plugins/orchestrator-backend
yarn version --new-version ${{ inputs.version }} --no-git-tag-version
sed -i 's/"@janus-idp\/backstage-plugin-orchestrator-common": "'"$current_version_common_package"'"/"@janus-idp\/backstage-plugin-orchestrator-common": "'${{ inputs.version }}'"/g' package.json
cd -
- name: Replace the package organization name to ${{ inputs.npmOrgName }}
run: |
old_string="@janus-idp/backstage-plugin-orchestrator"
new_string="@${{ inputs.npmOrgName }}/backstage-plugin-orchestrator"
grep -rl "$old_string" | xargs sed -i "s|$old_string|$new_string|g"
old_string="janus-idp.backstage-plugin-orchestrator"
new_string="${{ inputs.npmOrgName }}.backstage-plugin-orchestrator"
grep -rl "$old_string" | xargs sed -i "s|$old_string|$new_string|g"
- name: Print package names and versions
run: |
folders=("plugins/orchestrator-common" "plugins/orchestrator" "plugins/orchestrator-backend")
for folder in "${folders[@]}"; do
cd $folder
echo "Package name: $(node -p "require('./package.json').name")"
echo "Package version: $(node -p "require('./package.json').version")"
cd -
done
- name: Refresh dependencies
run: yarn --prefer-offline --frozen-lockfile
- name: Build the packages
run: |
echo Build plugins/orchestrator-common
cd plugins/orchestrator-common
yarn tsc && yarn build
cd -
echo Build plugins/orchestrator
cd plugins/orchestrator
yarn tsc && yarn build && yarn export-dynamic
cd -
echo Build plugins/orchestrator-backend
cd plugins/orchestrator-backend
yarn tsc && yarn build && yarn export-dynamic
cd -
- name: Delete exports property from orchestrator-backend/dist-dynamic
run: |
cd plugins/orchestrator-backend/dist-dynamic
jq 'del(.exports)' package.json > temp.json && mv temp.json package.json
cd -
- name: Publish packages to npmjs.com
if: ${{ !inputs.dryRun }}
run: |
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc
folders=("plugins/orchestrator-common" "plugins/orchestrator" "plugins/orchestrator-backend" "plugins/orchestrator-backend/dist-dynamic")
for folder in "${folders[@]}"; do
cd $folder
npm publish --access public
cd -
done
- name: Collect integrity hashes
id: collect_integrity
if: ${{ !inputs.dryRun }}
run: |
package="@${{ inputs.npmOrgName }}/backstage-plugin-orchestrator"
integrity=$(curl -s https://registry.npmjs.org/$package | jq -r ".versions[\"${{ inputs.version }}\"].dist.integrity")
echo "backstage_plugin_orchestrator=$integrity" >> $GITHUB_OUTPUT
package="@${{ inputs.npmOrgName }}/backstage-plugin-orchestrator-backend-dynamic"
integrity=$(curl -s https://registry.npmjs.org/$package | jq -r ".versions[\"${{ inputs.version }}\"].dist.integrity")
echo "backstage_plugin_orchestrator_backend_dynamic=$integrity" >> $GITHUB_OUTPUT
- name: Publish the release on GitHub
if: ${{ !inputs.dryRun }}
uses: ncipollo/release-action@v1
with:
tag: ${{ inputs.version }}
name: ${{ inputs.version }}
makeLatest: true
body: |
### Commit from `${{ inputs.githubOrgName }}/backstage-plugins @ ${{ inputs.githubRefName }}`
`${{ steps.get_commit_hash.outputs.commit_hash }}`
### Packages
- @${{ inputs.npmOrgName }}/backstage-plugin-orchestrator (`${{ steps.collect_integrity.outputs.backstage_plugin_orchestrator }}`)
- @${{ inputs.npmOrgName }}/backstage-plugin-orchestrator-backend-dynamic (`${{ steps.collect_integrity.outputs.backstage_plugin_orchestrator_backend_dynamic }}`)