This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright 2023 Janus Authors | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
name: Publish Backend Plugin Manager | |
on: | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
push: | |
env: | |
SCOPE: "@janus-idp" | |
jobs: | |
build: | |
# build the backend plugin manager in the backstage/backstage GitHub repository | |
name: Main Job | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: backstage/backstage | |
ref: master | |
- name: Setup Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: 18 | |
- name: Get sha of the latest backend-plugin-manager commit | |
id: get_commit_sha | |
run: | | |
echo "COMMIT_ID=$(git log -1 --pretty=format:%H -- packages/backend-plugin-manager)" >> "$GITHUB_OUTPUT" | |
echo "GH Output: " && cat $GITHUB_OUTPUT | |
- name: Test if commit is already published | |
id: test_commit_already_published | |
env: | |
COMMIT_ID: ${{ steps.get_commit_sha.outputs.COMMIT_ID }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
run: | | |
if [ "_$(npm dist-tag ls $SCOPE/backend-plugin-manager | grep -e ^$COMMIT_ID || echo '')" != "_" ]; then ALREADY_PUSHED="true"; else ALREADY_PUSHED="false"; fi | |
echo "ALREADY_PUSHED=$ALREADY_PUSHED" >> "$GITHUB_OUTPUT" | |
echo "GH Output: " && cat $GITHUB_OUTPUT | |
- name: Get the version of the backend-plugin-manager package | |
id: get_package_version | |
run: | | |
echo "PACKAGE_VERSION=$(node -p "require('./packages/backend-plugin-manager/package.json').version")" >> "$GITHUB_OUTPUT" | |
echo "GH Output: " && cat $GITHUB_OUTPUT | |
- name: Get the last version of the backend-plugin-manager package pushed to the NPMJS repository | |
env: | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
id: get_last_pushed_version | |
run: | | |
echo "LAST_PUSHED_VERSION=$(npm view $SCOPE/backend-plugin-manager version)" >> "$GITHUB_OUTPUT" | |
echo "GH Output: " && cat $GITHUB_OUTPUT | |
- name: Get new version to push | |
id: get_new_version_to_push | |
if: steps.test_commit_already_published.outputs.ALREADY_PUSHED == 'false' | |
env: | |
COMMIT_VERSION: ${{ steps.get_package_version.outputs.PACKAGE_VERSION }} | |
LAST_PUSHED_VERSION: ${{ steps.get_last_pushed_version.outputs.LAST_PUSHED_VERSION }} | |
run: | | |
COMMIT_MAJOR=$(echo $COMMIT_VERSION | cut -d. -f1) | |
COMMIT_MINOR=$(echo $COMMIT_VERSION | cut -d. -f2) | |
COMMIT_PATCH=$(echo $COMMIT_VERSION | cut -d. -f3 | cut -d- -f1) | |
if [ "$COMMIT_MAJOR.$COMMIT_MINOR.$COMMIT_PATCH" == "$COMMIT_VERSION" ]; then | |
COMMIT_PRERELEASE="" | |
else | |
COMMIT_PRERELEASE=$(echo $COMMIT_VERSION | cut -d- -f2) | |
fi | |
if [ -n "$COMMIT_PRERELEASE" ]; then | |
COMMIT_PATCH=$((COMMIT_PATCH-1)) | |
fi | |
PATCH=$((COMMIT_PATCH+1)) | |
if [ -z "$LAST_PUSHED_VERSION" ]; then | |
LAST_PUSHED_VERSION=$COMMIT_MAJOR.$COMMIT_MINOR.$PATCH-janus.0 | |
fi | |
LAST_PUSHED_MAJOR=$(echo $LAST_PUSHED_VERSION | cut -d. -f1) | |
LAST_PUSHED_MINOR=$(echo $LAST_PUSHED_VERSION | cut -d. -f2) | |
LAST_PUSHED_PATCH=$(echo $LAST_PUSHED_VERSION | cut -d. -f3 | cut -d- -f1) | |
LAST_PUSHED_PRERELEASE_WITHOUT_NUMBER=$(echo $LAST_PUSHED_VERSION | cut -d- -f2 | cut -d. -f1) | |
LAST_PUSHED_PRERELEASE_NUMBER=$(echo $LAST_PUSHED_VERSION | cut -d- -f2 | cut -d. -f2) | |
if [ "$COMMIT_MAJOR.$COMMIT_MINOR.$PATCH" == "$LAST_PUSHED_MAJOR.$LAST_PUSHED_MINOR.$LAST_PUSHED_PATCH" ]; then | |
PRERELEASE="janus.$((LAST_PUSHED_PRERELEASE_NUMBER+1))" | |
else | |
PRERELEASE="janus.0" | |
fi | |
echo "VERSION=$COMMIT_MAJOR.$COMMIT_MINOR.$PATCH-$PRERELEASE" >> "$GITHUB_OUTPUT" | |
echo "GH Output: " && cat $GITHUB_OUTPUT | |
- name: Update BackendPluginManager package.json with changed scope and version, and make it public | |
if: steps.test_commit_already_published.outputs.ALREADY_PUSHED == 'false' | |
env: | |
VERSION: ${{ steps.get_new_version_to_push.outputs.VERSION }} | |
run: | | |
sed -i "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" packages/backend-plugin-manager/package.json | |
sed -i "s/\"name\": \"@backstage\/backend-plugin-manager\"/\"name\": \"$SCOPE\/backend-plugin-manager\"/" packages/backend-plugin-manager/package.json | |
sed -i "s/\"private\": true/\"private\": false/" packages/backend-plugin-manager/package.json | |
echo "Package.JSON:" && cat packages/backend-plugin-manager/package.json | |
- name: Install Dependencies | |
env: | |
YARN_ENABLE_IMMUTABLE_INSTALLS: "false" | |
if: steps.test_commit_already_published.outputs.ALREADY_PUSHED == 'false' | |
run: yarn install | |
- name: Build the backend-plugin-manager package | |
if: steps.test_commit_already_published.outputs.ALREADY_PUSHED == 'false' | |
run: yarn workspace $SCOPE/backend-plugin-manager build | |
- name: Publish to NPM with the tag as the commit sha | |
if: steps.test_commit_already_published.outputs.ALREADY_PUSHED == 'false' | |
env: | |
COMMIT_ID: ${{ steps.get_commit_sha.outputs.COMMIT_ID }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
run: yarn publish --access public --tag $COMMIT_ID --tag latest --non-interactive |