Skip to content

Use GH script action to set PR status (#365) #412

Use GH script action to set PR status (#365)

Use GH script action to set PR status (#365) #412

Workflow file for this run

# Based on projen template from src/microapps-cdk/.github/workflows/release.yml
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
name: Merge to Main Build
on:
push:
branches:
- 'main'
paths:
- '**'
- '!**/README.md'
# When testing changes to workflow
# pull_request:
# branches:
# - main
jobs:
install-deps:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/configure-nodejs
with:
lookup-only: 'true' # We only want to lookup from the cache - if a hit, this job does nothing
build:
name: Build CDK Construct
needs: [install-deps]
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
self_mutation_happened: ${{ steps.self_mutation.outputs.self_mutation_happened }}
env:
CI: 'true'
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- uses: ./.github/actions/configure-nodejs
- name: Build All TypeScript
run: yarn build
- name: Run Node Tests
env:
NODE_ENV: test
run: yarn test
- name: Install CDK Construct Deps
working-directory: packages/microapps-cdk/
run: yarn install --frozen-lockfile
- name: Build CDK Construct
working-directory: packages/microapps-cdk/
run: yarn build
- name: Projen build
working-directory: packages/microapps-cdk/
run: npx projen build
- id: self_mutation
name: Find mutations
run: |-
git add .
git diff --staged --patch --exit-code > .repo.patch || echo "self_mutation_happened=true" >> $GITHUB_OUTPUT
- if: steps.self_mutation.outputs.self_mutation_happened
name: Upload patch
uses: actions/upload-artifact@v3
with:
name: .repo.patch
path: .repo.patch
- name: Fail build on mutation
if: steps.self_mutation.outputs.self_mutation_happened
run: |-
echo "::error::Files were changed during build (see build log). If this was triggered from a fork, you will need to update your branch."
cat .repo.patch
exit 1
- name: Upload CDK Construct artifact
uses: actions/upload-artifact@v3
with:
name: build-artifact
path: packages/microapps-cdk/dist
self-mutation:
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
if: always() && needs.build.outputs.self_mutation_happened && !(github.event.pull_request.head.repo.full_name != github.repository)
steps:
- name: Checkout
uses: actions/checkout@v4
with:
token: ${{ secrets.PROJEN_GITHUB_TOKEN }}
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Download patch
uses: actions/download-artifact@v3
with:
name: .repo.patch
path: ${{ runner.temp }}
- name: Apply patch
run: '[ -s ${{ runner.temp }}/.repo.patch ] && git apply ${{ runner.temp }}/.repo.patch || echo "Empty patch. Skipping."'
- name: Set git identity
run: |-
git config user.name "github-actions"
git config user.email "[email protected]"
- name: Push changes
run: |2-
git add .
git commit -s -m "chore: self mutation"
git push origin HEAD:${{ github.event.pull_request.head.ref }}
#
# Publish Tool
#
build-publish-tool:
needs: build
name: Build Publish Tool
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: ./.github/actions/configure-nodejs
- name: Check for new commits
id: git_remote
run: echo latest_commit="$(git ls-remote origin -h ${{ github.ref }} | cut -f1)" >> $GITHUB_OUTPUT
- name: Build Publish TypeScript
run: yarn build:publish
- name: Run Lint
run: yarn lint
- name: Upload Publish Tool artifact
uses: actions/upload-artifact@v3
with:
name: publish-tool-dist
path: |
packages/pwrdrvr/
!packages/pwrdrvr/node_modules/
- name: Upload Publish Tool - Convenience artifact
uses: actions/upload-artifact@v3
with:
name: publish-tool-dist-convenience
path: |
packages/microapps-publish/
!packages/microapps-publish/node_modules/
- name: Upload Datalib artifact
uses: actions/upload-artifact@v3
with:
name: datalib-dist
path: |
packages/microapps-datalib/
!packages/microapps-datalib/node_modules/
- name: Upload Router Lib artifact
uses: actions/upload-artifact@v3
with:
name: router-lib-dist
path: |
packages/microapps-router-lib/
!packages/microapps-router-lib/node_modules/
#
# Release Assets - Dry Run Only
#
package-js-publish-tool:
needs: [build, build-publish-tool]
runs-on: ubuntu-latest
permissions: {}
if: '! needs.build.outputs.self_mutation_happened'
steps:
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Download Publish Tool build artifacts
uses: actions/download-artifact@v3
with:
name: publish-tool-dist
path: packages/pwrdrvr
- name: Download Publish Tool - Convenience build artifacts
uses: actions/download-artifact@v3
with:
name: publish-tool-dist
path: packages/microapps-publish
- name: Download Datalib build artifacts
uses: actions/download-artifact@v3
with:
name: datalib-dist
path: packages/microapps-datalib
- name: Download Router Lib build artifacts
uses: actions/download-artifact@v3
with:
name: router-lib-dist
path: packages/microapps-router-lib
- name: NPM registry authentication
run: npm set //registry.npmjs.org/:_authToken ${{ secrets.NPMJSORG_PUBLISH_TOKEN }}
- name: Release Publish Tool - NPM - Dry Run
working-directory: packages/pwrdrvr
run: |
npm publish --dry-run
- name: Release Publish Tool Convenience - NPM - Dry Run
working-directory: packages/microapps-publish
run: |
npm publish --dry-run
- name: Release DataLib - NPM - Dry Run
working-directory: packages/microapps-datalib
run: |
npm publish --dry-run
- name: Release Router Lib - NPM - Dry Run
working-directory: packages/microapps-router-lib
run: |
npm publish --dry-run
package-js:
needs: [build]
runs-on: ubuntu-latest
permissions: {}
if: '! needs.build.outputs.self_mutation_happened'
steps:
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create js artifact
run: cd .repo && npx projen package:js
- name: Collect js Artifact
run: mv .repo/dist dist
package-java:
needs: build
runs-on: ubuntu-latest
permissions: {}
if: '! needs.build.outputs.self_mutation_happened'
steps:
- uses: actions/setup-java@v2
with:
distribution: temurin
java-version: 11.x
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create java artifact
run: cd .repo && npx projen package:java
- name: Collect java Artifact
run: mv .repo/dist dist
package-python:
needs: build
runs-on: ubuntu-latest
permissions: {}
if: '! needs.build.outputs.self_mutation_happened'
steps:
- uses: actions/setup-node@v4
with:
node-version: 18
- uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create python artifact
run: cd .repo && npx projen package:python
- name: Collect python Artifact
run: mv .repo/dist dist
package-dotnet:
needs: build
runs-on: ubuntu-latest
permissions: {}
if: '! needs.build.outputs.self_mutation_happened'
steps:
- uses: actions/setup-node@v4
with:
node-version: 18
- uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.x
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-artifact
path: dist
- name: Prepare Repository
run: mv dist .repo
- name: Install Dependencies
run: cd .repo && yarn install --check-files --frozen-lockfile
- name: Create dotnet artifact
run: cd .repo && npx projen package:dotnet
- name: Collect dotnet Artifact
run: mv .repo/dist dist