Cli-core Release #120
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
name: Cli-core Release | |
on: | |
workflow_dispatch: | |
inputs: | |
cli-branch: | |
description: 'Run cli workflow in the given branch' | |
default: main | |
homebrew-branch: | |
description: 'HomeBrew branch name' | |
default: main | |
homebrew-prerelease: | |
description: 'HomeBrew prerelease' | |
default: 'false' | |
jobs: | |
cli-core-token-validation: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout cli-core repo | |
uses: actions/checkout@v2 | |
- run: | | |
git pull | |
make install | |
- name: Extract branch name | |
id: extract_branch | |
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" | |
- name: Trigger CLI token validation workflow | |
run: | | |
fileName="$GITHUB_WORKSPACE/.github/scripts/trigger-workflow.js" | |
node -e "require('$fileName').triggerWorkflow()" | |
env: | |
WORKFLOW_NAME: '.github/workflows/release-token-validation.yml' | |
REPO_NAME: ${{ github.repository_owner }}/twilio-cli | |
REPO_ACCESS_TOKEN: ${{ secrets.REPO_ACCESS_TOKEN }} | |
BRANCH_NAME: ${{steps.extract_branch.outputs.branch}} | |
- name: Validate REPO_ACCESS_TOKEN | |
uses: actions/checkout@v2 | |
with: | |
repository: '${{ github.repository_owner }}/twilio-oai' | |
token: ${{ secrets.REPO_ACCESS_TOKEN }} | |
- name: Validate AWS tokens | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-session-token: ${{ secrets.AWS_SESSION_TOKEN }} | |
aws-region: us-east-1 | |
cli-token-validation: | |
needs: [ cli-core-token-validation ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout cli-core repo | |
uses: actions/checkout@v2 | |
- name: Execute py script to validate twilio-cli tokens | |
id: cli_token | |
run: | | |
output=$(python3 .github/scripts/validate_cli_tokens.py) | |
echo "::set-output name=tokenStatus::$output" | |
- name: Print status | |
run: echo "${{ steps.cli_token.outputs.tokenStatus }}" | |
- name: Validate the github workflow | |
if: ${{ steps.cli_token.outputs.tokenStatus != 'success'}} | |
run: exit 1 | |
# notify-start: | |
# needs: [ cli-token-validation ] | |
# name: Notify Release Started | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v2 | |
# - name: Extract branch name | |
# id: extract_branch | |
# run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" | |
# - name: Slack Notification | |
# if: ${{steps.extract_branch.outputs.branch == 'main' }} | |
# uses: rtCamp/action-slack-notify@v2 | |
# env: | |
# SLACK_WEBHOOK: ${{ secrets.SLACK_WEB_HOOK }} | |
# SLACK_COLOR: "#36a64f" | |
# SLACK_USERNAME: CLI Release Bot | |
# SLACK_ICON_EMOJI: ":ship:" | |
# SLACK_TITLE: "Twilio Cli" | |
# SLACK_MESSAGE: 'Release Started :rocket:' | |
# MSG_MINIMAL: actions url | |
test: | |
needs: [ cli-token-validation ] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [14.x, 16.x, 18.x] | |
steps: | |
- name: Checkout cli-core repo | |
uses: actions/checkout@v2 | |
- run: make install | |
- name: Use Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v2 | |
with: | |
node-version: ${{ matrix.node-version }} | |
cache: 'npm' | |
- name: Run tests | |
run: make test | |
update-api-specs: | |
runs-on: ubuntu-latest | |
needs: [ test ] | |
outputs: | |
change-log: ${{ steps.update-specs.outputs.change-log }} | |
version-type: ${{ steps.update-specs.outputs.version-type }} | |
steps: | |
- name: Create temporary folder for copying json files from OAI repo | |
run: mkdir -p ~/oai_definitions/json | |
- name: Checkout OAI repo | |
uses: actions/checkout@v2 | |
with: | |
repository: '${{ github.repository_owner }}/twilio-oai' | |
token: ${{ secrets.REPO_ACCESS_TOKEN }} | |
- run: | | |
cp -R spec/json/. ~/oai_definitions/json/ | |
cp -R CHANGES.md ~/oai_definitions/CHANGES.md | |
- name: Checkout cli-core repo | |
uses: actions/checkout@v2 | |
with: | |
token: ${{ secrets.REPO_ACCESS_TOKEN }} | |
- name: Update OAI specs | |
id: update-specs | |
run: | | |
make install | |
cp -R ~/oai_definitions/CHANGES.md OAI_CHANGES.md | |
source .github/scripts/update-api-spec-with-changelog.sh | |
echo "::set-output name=change-log::$changeLog" | |
echo "::set-output name=version-type::$versionType" | |
release: | |
runs-on: ubuntu-latest | |
needs: [update-api-specs] | |
outputs: | |
tag-name: ${{ steps.semantic-release.outputs.TAG_NAME }} | |
steps: | |
- name: Checkout cli-core repo | |
uses: actions/checkout@v2 | |
with: | |
persist-credentials: false | |
- run: | | |
git pull | |
make install | |
- name: semanticRelease | |
id: semantic-release | |
run: DEBUG=semantic-release:* npx semantic-release -t \${version} | |
env: | |
GITHUB_TOKEN: ${{ secrets.REPO_ACCESS_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Update release | |
run: | | |
fileName="$GITHUB_WORKSPACE/.github/scripts/update-release.js" | |
node -e "require('$fileName').updateRelease()" | |
env: | |
REPO_ACCESS_TOKEN: ${{ github.token }} | |
TAG_NAME: ${{ steps.semantic-release.outputs.TAG_NAME }} | |
RELEASE_BODY: ${{needs.update-api-specs.outputs.change-log}} | |
REPO_NAME: ${{ github.repository }} | |
triggerCliWorkflow: | |
runs-on: ubuntu-latest | |
needs: [ update-api-specs, release] | |
steps: | |
- name: Checkout cli-core repo | |
uses: actions/checkout@v2 | |
- run: | | |
git pull | |
make install | |
- name: Invoke CLI workflow with changelog and version-type | |
run: | | |
fileName="$GITHUB_WORKSPACE/.github/scripts/trigger-workflow.js" | |
node -e "require('$fileName').triggerWorkflow()" | |
env: | |
REPO_ACCESS_TOKEN: ${{ secrets.REPO_ACCESS_TOKEN }} | |
WORKFLOW_NAME: 'release.yml' | |
BRANCH_NAME: ${{github.event.inputs.cli-branch}} | |
REPO_NAME: ${{ github.repository_owner }}/twilio-cli | |
INPUTS: '{ "change-log": ${{ toJSON(needs.update-api-specs.outputs.change-log) }}, "version-type": "${{needs.update-api-specs.outputs.version-type}}", "homebrew-branch": "${{github.event.inputs.homebrew-branch}}", "homebrew-prerelease": "${{github.event.inputs.homebrew-prerelease}}" }' | |
# notify-complete-fail: | |
# if: ${{ (needs.cli-token-validation.result != 'failure' || needs.cli-core-token-validation.result != 'failure' ) && (failure() || cancelled()) }} | |
# needs: [ triggerCliWorkflow ] | |
# name: Notify Release Failed | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v2 | |
# - name: Slack Notification | |
# uses: rtCamp/action-slack-notify@v2 | |
# env: | |
# SLACK_WEBHOOK: ${{ secrets.ALERT_SLACK_WEB_HOOK }} | |
# SLACK_COLOR: "#ff3333" | |
# SLACK_USERNAME: CLI Release Bot | |
# SLACK_ICON_EMOJI: ":ship:" | |
# SLACK_TITLE: "Twilio Cli-core" | |
# SLACK_MESSAGE: 'Release workflow Failed' | |
# MSG_MINIMAL: actions url |