Skip to content

Typescript 5

Typescript 5 #54

Workflow file for this run

name: Core
on:
push:
branches: [master]
pull_request: {}
permissions:
contents: read
packages: read
jobs:
test:
name: Test & Lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Init Node
uses: ./.github/actions/init-node
- name: Lint
run: npm run lint
- name: Test
run: npm test
- name: Build
run: npm run build
- name: Upload coverage
continue-on-error: true
uses: coverallsapp/[email protected]
with:
file: ./coverage/lcov.info
changelog:
name: Changelog
runs-on: ubuntu-latest
outputs:
changelog: ${{ steps.log.outputs.changelog }}
release-type: ${{ steps.log.outputs.release-type }}
issues-closed: ${{ steps.log.outputs.issues-closed }}
in-sync: ${{ steps.log.outputs.in-sync }}
should-release: ${{ steps.log.outputs.should-release }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Conditional args
id: args
if: ${{ startsWith(github.ref, 'refs/tags/') }}
run: >
echo "before=${{ github.ref_name }}" >> $GITHUB_OUTPUT &&
echo "until=${{ github.ref_name }}" >> $GITHUB_OUTPUT
- name: Get last tag
id: last-tag
uses: alorel-actions/semantic-release-lite/last-tag@v0
with:
before: ${{ steps.args.outputs.before }}
- name: Generate changelog
id: log
uses: alorel-actions/semantic-release-lite/generate-changelog@v0
with:
last-tag: ${{ steps.last-tag.outputs.last-tag }}
from: ${{ steps.last-tag.outputs.last-tag }}
until: ${{ steps.args.outputs.until || github.sha }}
minor-types: |
feat: Features
patch-types: |
fix: Bug Fixes
perf: Performance
trivial-types: |
chore: Maintenance
deps: Dependency updates
ci: CI & Build
build: CI & Build
refactor: Refactors
docs: Documentation
sync-check:
name: Sync check
runs-on: ubuntu-latest
needs:
- changelog
- test
if: ${{ needs.changelog.outputs.should-release == 'true' && github.ref == 'refs/heads/master' }}
outputs:
in-sync: ${{ steps.check.outputs.in-sync }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Check
id: check
uses: alorel-actions/semantic-release-lite/sync-check@v0
release-git:
name: "Release: Git"
runs-on: ubuntu-latest
if: ${{ needs.sync-check.outputs.in-sync == 'true' }}
needs:
- changelog
- test
- sync-check
outputs:
sha: ${{ steps.sha.outputs.sha }}
next-version: ${{ steps.bump.outputs.version }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
token: ${{ secrets.GH_TOKEN }}
- name: Git identity
uses: alorel-actions/git-ident@v1
- name: Init Node
uses: ./.github/actions/init-node
- name: Bump version
id: bump
run: echo "version=$(npm version ${{ needs.changelog.outputs.release-type }} --git-tag-version=false)" >> $GITHUB_OUTPUT
- name: Output SHA
id: sha
shell: bash
run: echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Push
run: git push
release-npm:
name: "Release: NPM"
runs-on: ubuntu-latest
if: ${{ needs.sync-check.outputs.in-sync == 'true' }}
needs:
- changelog
- test
- sync-check
- release-git
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
token: ${{ secrets.GH_TOKEN }}
ref: ${{ needs.release-git.outputs.sha }}
- name: Init Node
uses: ./.github/actions/init-node
with:
auth-token: ${{ secrets.NPM_TOKEN }}
- name: Build
run: npm run build
- name: Publish
working-directory: dist
run: npm publish
release-github:
name: "Release: GitHub"
runs-on: ubuntu-latest
if: ${{ needs.sync-check.outputs.in-sync == 'true' }}
needs:
- changelog
- test
- sync-check
- release-git
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
ref: ${{ needs.release-git.outputs.sha }}
- name: Create release
uses: ncipollo/release-action@v1
with:
allowUpdates: false
prerelease: false
generateReleaseNotes: false
commit: ${{ needs.release-git.outputs.sha }}
tag: ${{ needs.release-git.outputs.next-version }}
body: ${{ needs.changelog.outputs.changelog }}
notify:
name: Notify issues
runs-on: ubuntu-latest
if: ${{ needs.sync-check.outputs.in-sync == 'true' && needs.changelog.outputs.issues-closed }}
needs:
- changelog
- test
- sync-check
- release-npm
- release-git
- release-github
steps:
- name: Notify
uses: alorel-actions/semantic-release-lite/notify@v0
with:
tag: ${{ needs.release-git.outputs.next-version }}
issues: ${{ needs.changelog.outputs.issues-closed }}
allow-out-of-sync: true