Skip to content

Make icons path configurable instead of hardcoded (#455) #68

Make icons path configurable instead of hardcoded (#455)

Make icons path configurable instead of hardcoded (#455) #68

name: Build and publish the documentation app
on:
push:
branches:
- 'master'
paths:
- 'package.json'
- 'angular.json'
- 'tsconfig.generator.json'
- 'api-generator/**'
- 'projects/cps-ui-kit/src/**'
- 'projects/composition/**'
- '.github/**'
jobs:
# Generate api data
generate-api-data:
if: "!contains(github.event.head_commit.message, 'Update autogenerated JSON files')"
runs-on: ubuntu-latest
# Permissions needed to create PR and write content
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Use Node.js v20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
- name: Generate API data
working-directory: ./projects/composition
run: |
npm run generate-json-api
# Instead of direct commit/push, create a PR
- name: Create Pull Request
id: cpr
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
# More descriptive commit message
commit-message: 'chore: Update API documentation JSON files'
# Use bot account for better tracking
committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
# Unique branch name using run number to avoid conflicts
branch: api-docs-update-${{ github.run_number }}
# Auto-delete branch after merge
delete-branch: true
title: 'chore: Update API documentation JSON files'
# Detailed PR description with context
body: |
## Auto-generated API Documentation Update
This PR contains automatically generated API documentation files.
### Changes
- Updated JSON API files based on latest component changes
### Workflow Run
- Triggered by commit: ${{ github.sha }}
- Run ID: ${{ github.run_id }}
---
🤖 This PR was automatically created by the documentation workflow.
# Labels for organization and to skip changelog
labels: |
documentation
automated
skip-changelog
# Auto-merge the PR (requires repo settings to allow auto-merge)
- name: Enable Pull Request Automerge
if: steps.cpr.outputs.pull-request-operation == 'created'
uses: peter-evans/enable-pull-request-automerge@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
pull-request-number: ${{ steps.cpr.outputs.pull-request-number }}
merge-method: squash
# Auto-approve the PR so it can be merged
- name: Auto approve PR
if: steps.cpr.outputs.pull-request-operation == 'created'
uses: hmarr/auto-approve-action@v4
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
pull-request-number: ${{ steps.cpr.outputs.pull-request-number }}
# Build job
build:
runs-on: ubuntu-latest
needs: generate-api-data
# Only run if generate-api-data succeeded or was skipped (not failed)
if: always() && (needs.generate-api-data.result == 'success' || needs.generate-api-data.result == 'skipped')
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ssh-key: ${{ secrets.DEPLOY_KEY }}
# Explicitly checkout master to get latest changes after PR merge
ref: master
- name: Fetch latest commits
run: git pull origin master
- name: Use Node.js v20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
registry-url: 'https://registry.npmjs.org'
- name: Cache node modules
id: cache-npm
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Install dependencies
run: npm ci
- name: Build CPS UI Kit Component Library
run: npm run build
- name: Build documentation app
run: npm run build:documentation
- name: Copy 404.html from source to dist
run: cp ./projects/composition/src/404.html ./dist/composition/browser/404.html
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: dist/composition/browser
# Deploy job
deploy:
needs: build
# Only deploy if build succeeded
if: success()
permissions:
pages: write
id-token: write
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
# Specify runner + deployment step
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4