Skip to content

github-merge-queue[bot] is creating a Release Candidate 🚀 #86

github-merge-queue[bot] is creating a Release Candidate 🚀

github-merge-queue[bot] is creating a Release Candidate 🚀 #86

name: Release Candidate
run-name: ${{ github.actor }} is creating a Release Candidate 🚀
on:
push:
branches:
- master
jobs:
Creating-Release-Candidate:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./playbook
env:
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
steps:
- name: Check for required Semver labels
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const requiredLabels = ['Major', 'Minor', 'Patch'];
const { data: labels } = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const presentLabels = labels.map(label => label.name);
const presentRequiredLabel = requiredLabels.filter(label => presentLabels.includes(label));
if (presentRequiredLabels.length === 0) {
core.setFailed('Your pull request is missing a required Semver label: (${requiredLabels.join(', ')})');
else if (presentRequiredLabels.length > 1) {
core.setFailed('Your pull request has multiple Semver labels. Please use only one.')
} else {
console.log('Pull request has a required Semver label.');
}
- uses: actions/checkout@v3
- name: 'Enable registry auth'
shell: bash
run: |
echo "//registry.npmjs.org/:_authToken="$(echo -n '${{ secrets.NPM_TOKEN }}')"" >> ~/.npmrc
echo "//npm.powerapp.cloud/:_auth="$(echo -n 'gh-actions:${{ secrets.POWERHOME_NPM_REGISTRY_PASSWORD }}' | base64)"" >> ~/.npmrc
echo "//npm.powerapp.cloud/:always-auth = true" >> .npmrc
- uses: actions/setup-node@v4
with:
node-version: 20.11.0
- name: Ruby Setup
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Python Setup
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Set Git Config
run: |
git config --local user.name "${{ github.actor }}"
git config --local user.email "${{ github.actor }}@users.noreply.github.com"
- name: Determine version increment type
id: version-label
run: |
if [[ ${{ contains(github.event.pull_request.labels.*.name, 'Major') }} == 'true' ]]; then
echo "INCREMENT=major" >> $GITHUB_OUTPUT
elif [[ ${{ contains(github.event.pull_request.labels.*.name, 'Minor') }} == 'true' ]]; then
echo "INCREMENT=minor" >> $GITHUB_OUTPUT
elif [[ ${{ contains(github.event.pull_request.labels.*.name, 'Patch') }} == 'true' ]]; then
echo "INCREMENT=patch" >> $GITHUB_OUTPUT
else
echo "No valid version label found. Please add a Major, Minor, or Patch label to the PR."
exit 1
fi
# - name: Grab Current Version and Set New RC Version
# id: set-version
# run: |
# current_npm_version=$(node -pe "require('./package.json').version")
# new_npm_version=$(yarn version --pre${{ steps.version-label.outputs.INCREMENT }} --preid rc --no-git-tag-version | grep "New version:" | awk '{print $4}')
# new_npm_version=${new_npm_version#v}
# new_ruby_version=$(echo $new_npm_version | sed 's/-rc\./.pre.rc./')
# echo "new_npm_version=${new_npm_version}" >> $GITHUB_ENV
# echo "new_ruby_version=${new_ruby_version}" >> $GITHUB_ENV
# - name: Check if version exists and increment if necessary
# run: |
# max_attempts=100
# attempt=0
# current_version="${{ env.new_npm_version }}"
# while [ $attempt -lt $max_attempts ]; do
# if npm view playbook-ui@$current_version version &>/dev/null; then
# echo "Version $current_version already exists. Incrementing..."
# current_version=$(yarn version --prerelease --preid rc --no-git-tag-version | grep "New version:" | awk '{print $4}')
# current_version=${current_version#v}
# else
# echo "Version $current_version is available."
# break
# fi
# attempt=$((attempt+1))
# done
# if [ $attempt -eq $max_attempts ]; then
# echo "Error: Maximum attempts reached. Unable to find an available version."
# exit 1
# fi
# echo "new_npm_version=${current_version}" >> $GITHUB_ENV
# new_ruby_version=$(echo $current_version | sed 's/-rc\./.pre.rc./')
# echo "new_ruby_version=${new_ruby_version}" >> $GITHUB_ENV
# - name: Update Version.rb
# run: |
# gem install bundler
# bundle
# bin/rails pb_release:action[${{env.new_ruby_version}}]
# - name: Distribute and Publish (NPM)
# run: |
# yarn install
# bundle
# yarn release
# npm pack
# npm publish --registry https://registry.npmjs.org playbook-ui-${{ env.new_npm_version }}.tgz --tag rc
# - name: Distribute and Publish (RubyGems)
# run: |
# bin/build_gem
# gem build lib/playbook_ui_docs.gemspec
# rm -rf dist/playbook-doc.js dist/playbook-rails.js dist/app dist/pb_doc_helper.rb dist/menu.yml
# gem push playbook_ui-${{ env.new_ruby_version }}.gem --host https://rubygems.org/ --key ${{ env.GEM_HOST_API_KEY }}
# gem push playbook_ui_docs-${{ env.new_ruby_version }}.gem --host https://rubygems.org/ --key ${{ env.GEM_HOST_API_KEY }}
# - name: Create GitHub Release
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# run: |
# gh release create v${{ env.new_npm_version }} \
# --title "Release Candidate v${{ env.new_npm_version }}" \
# --notes "This is a release candidate version. Please test thoroughly before promoting to a stable release." \
# --prerelease
- name: Leave PR comment
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RUBY_GEM_VERSION: ${{ env.new_ruby_version }}
RUBY_GEM_LINK: https://rubygems.org/gems/playbook_ui/versions/${{env.new_ruby_version}}
NPM_VERSION: ${{ env.new_npm_version }}
NPM_LINK: https://www.npmjs.com/package/playbook-ui/v/${{env.new_npm_version}}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const commitSha = context.payload.head_commit.id;
const commitMessage = context.payload.head_commit.message;
const commitAuthor = context.payload.head_commit.author.name;
const commitUrl = context.payload.head_commit.url;
console.log(`Commit message: ${commitMessage}`);
console.log(`Commit author: ${commitAuthor}`);
console.log(`Commit URL: ${commitUrl}`);
// Get the PR related to this commit using octokit API
const pullRequests = await github.rest.repos.listPullRequestsAssociatedWithCommit({
owner: context.repo.owner,
repo: context.repo.repo,
commit_sha: commitSha
});
if (pullRequests.data.length > 0) {
const pullRequestNumber = pullRequests.data[0].number;
console.log(`Found pull request #${pullRequestNumber} for commit ${commitSha}`);
// Add a comment to the pull request
await github.rest.issues.createComment({
issue_number: pullRequestNumber,
owner: context.repo.owner,
repo: context.repo.repo,
body: `You merged this pr to master branch:
- Ruby Gem: [${{env.RUBY_GEM_VERSION}}](${{env.RUBY_GEM_LINK}})
- NPM: [${{env.NPM_VERSION}}](${{env.NPM_LINK}})`
});
} else {
console.log('No pull request found for this commit');
}