Skip to content

Generate Client Library + Publish 📦 to npmjs + Publish to GitHub Releases #18

Generate Client Library + Publish 📦 to npmjs + Publish to GitHub Releases

Generate Client Library + Publish 📦 to npmjs + Publish to GitHub Releases #18

Workflow file for this run

name: Generate Client Library + Publish 📦 to npmjs + Publish to GitHub Releases
on:
workflow_dispatch:
inputs:
version:
required: true
defaults:
run:
shell: bash
permissions:
contents: read
id-token: write
env:
GENERATOR_VERSION: 3.0.54
GENERATOR_NAME: swagger-codegen-cli.jar
JAR_ASANA: codegen/swagger/target/AsanaClientCodegen-swagger-codegen-1.0.0.jar
ACTUAL_LANG: com.asana.codegen.JavascriptClientCodegenGenerator
NAME: asana
jobs:
generate-javascript-library:
name: Generate JavaScript client library
runs-on: ubuntu-latest
steps:
- name: Authenticate to AWS
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-east-1
role-to-assume: arn:aws:iam::403483446840:role/autogen_role_beta_github_actions_release_asana_client_libraries
- name: Get GitHub app token
uses: asana/get-github-app-token@v1
id: get-token
with:
github-app-name: asana-publish-client-libraries
- name: Checkout repo files and set the git token
uses: actions/checkout@v4
with:
token: ${{ steps.get-token.outputs.app-token }}
- uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "17"
- name: Download generator
run: |
wget -q -O $GENERATOR_NAME https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/${{ env.GENERATOR_VERSION }}/swagger-codegen-cli-${{ env.GENERATOR_VERSION }}.jar
- name: Build custom code
run: |
pushd codegen/swagger >/dev/null
mvn package
popd >/dev/null
- name: Generate library
run: >-
java -cp "${{ env.JAR_ASANA }}:${{ env.GENERATOR_NAME }}"
io.swagger.codegen.v3.cli.SwaggerCodegen
generate
--input-spec https://raw.githubusercontent.com/Asana/openapi/master/defs/asana_sdk_oas.yaml
--template-dir "codegen/templates"
--lang "${{ env.ACTUAL_LANG }}"
-DpackageName=${{ env.NAME }}
--additional-properties "projectVersion=${{ inputs.version }},projectName=${{ env.NAME }},packageName=${{ env.NAME }},usePromises=true,useES6=true"
- name: Clean up generator
run: rm -rf codegen/swagger/target ${{ env.GENERATOR_NAME }}
- name: Push changes to master branch
run: |
git config user.name asana-publish-client-libraries[bot]
git config user.email 159857493+asana-publish-client-libraries[bot]@users.noreply.github.com
git add .
git commit -m 'Updated JavaScript SDK: v${{ inputs.version }}'
git push origin master
git pull
git tag 'v${{ inputs.version }}' --force
git push origin --tags --force
publish-to-npmjs:
needs: generate-javascript-library
name: Build and publish 📦 to npmjs
runs-on: ubuntu-latest
steps:
- name: Authenticate to AWS
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-east-1
role-to-assume: arn:aws:iam::403483446840:role/autogen_role_beta_github_actions_release_asana_client_libraries
- name: Load secrets
uses: aws-actions/aws-secretsmanager-get-secrets@v1
with:
secret-ids: NPM_API,prod/github_actions_release_asana_client_libraries/npm_api_key
# npm_api_key secret is stored as {key:"***..."}.
# GitHub Actions environment variable name is NPM_API so to access "key" from the json we can use NPM_API_KEY
parse-json-secrets: true
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
- uses: actions/setup-node@v4
with:
node-version: "18.x"
registry-url: "https://registry.npmjs.com"
- name: Build distribution
run: |
npm pkg set 'main'='dist/index.js'
npm pkg set 'scripts.build'='babel src -d dist'
npm pkg set 'scripts.prepare'='npm run build'
npm install
npm publish
env:
NODE_AUTH_TOKEN: ${{ env.NPM_API_KEY }}
publish-to-github-releases:
needs: publish-to-npmjs
name: Build and publish to GitHub Releases
runs-on: ubuntu-latest
steps:
- name: Authenticate to AWS
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-east-1
role-to-assume: arn:aws:iam::403483446840:role/autogen_role_beta_github_actions_release_asana_client_libraries
- name: Get GitHub app token
uses: asana/get-github-app-token@v1
id: get-token
with:
github-app-name: asana-publish-client-libraries
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
- uses: actions/setup-node@v4
with:
node-version: "18.x"
registry-url: "https://registry.npmjs.com"
- name: Build distribution
run: |
npm pkg set 'main'='dist/index.js'
npm pkg set 'scripts.build'='babel src -d dist'
npm pkg set 'scripts.prepare'='npm run build'
npm install
- name: Bundle code for browser
run: |
npm install -g browserify
npm install -g uglify-js
browserify dist/index.js -s Asana | uglifyjs > dist/asana-min.js
browserify dist/index.js -s Asana > dist/asana.js
- name: Publish to GitHub Releases
run: gh release create v${{ inputs.version }} dist/asana.js dist/asana-min.js
env:
GH_TOKEN: ${{ steps.get-token.outputs.app-token }}