Skip to content

Full rework

Full rework #7

Workflow file for this run

name: 'Javascript'
on:
pull_request:
branches: [ master ]
push:
branches: [ master ]
concurrency:
group: javascript-${{ github.ref }}
cancel-in-progress: true
jobs:
lint:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.0
- name: Use Node.js 16.x
uses: actions/setup-node@v3
with:
node-version: 16.x
cache: yarn
- name: Install
run: yarn install --immutable
- name: Lint
continue-on-error: true
run: yarn lint -f @microsoft/sarif -o eslint-results.sarif
- name: Upload analysis results to GitHub
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: eslint-results.sarif
wait-for-processing: true
check-build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.0
- name: Use Node.js 16.x
uses: actions/setup-node@v3.8.1
with:
node-version: 16.x
cache: yarn
- name: Install
run: yarn install --immutable
- name: Build
run: yarn build:prod
- name: Archive build artifacts
uses: actions/upload-artifact@v3
with:
name: bundle
path: dist
- name: Check build
run: |
if [ "$(git diff --ignore-space-at-eol dist/bundle.cjs | wc -l)" -gt "0" ]; then
echo "::error file=dist/bundle.js::Detected uncommitted changes after build. Please run `yarn build:prod` and commit the changes."
exit 1
fi
tests:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.0
- name: Use Node.js 16.x
uses: actions/setup-node@v3.8.1
with:
node-version: 16.x
cache: yarn
- name: Install
run: yarn install --immutable
- name: Type check tests
run: yarn test:types --pass-with-no-tests
- name: Run tests
run: yarn test --coverage
- name: Upload coverage
uses: actions/upload-artifact@v3
with:
name: coverage
path: coverage
sonarcloud:
if: ${{ !startsWith(github.head_ref, 'dependabot/') && !startsWith(github.head_ref, 'renovate/') }}
runs-on: ubuntu-latest
needs: [ tests ]
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.0
with:
fetch-depth: 0
- name: Download test coverage
uses: actions/download-artifact@v3
continue-on-error: true
with:
name: coverage
path: coverage
- name: Load package.json
id: info
run: echo "version=$(jq -r ".version" package.json)" >> $GITHUB_OUTPUT
- name: Sonarcloud
uses: sonarsource/sonarcloud-github-action@v1.9
with:
args: >
-Dsonar.projectVersion=${{ steps.info.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
action-tests:
runs-on: ubuntu-latest
needs: [ check-build ]
strategy:
fail-fast: false
matrix:
include:
- branch: test/test-a-affected
workspace: test-a
base: master
affected: true
- branch: test/test-a-affected
workspace: test-a
base: master
pattern: '*.ts'
affected: false
- branch: test/test-a-affected
workspace: test-a
base: master
pattern: 'src/**'
affected: true
- branch: test/test-a-affected
workspace: test-b
base: master
affected: false
- branch: test/tags
workspace: test-a
base: test-tag
affected: true
- branch: test/tags
workspace: test-b
base: test-tag
affected: false
- branch: test/dependency-affected
workspace: test-c
base: master
affected: true
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.0
- name: Checkout test repository
uses: actions/checkout@v4.1.0
with:
repository: neoxia/test-is-workspace-affected
path: test-repo
ref: ${{ matrix.branch }}
- name: Test action
id: affected
uses: ./
with:
project-root: test-repo
workspace: ${{ matrix.workspace }}
base: ${{ matrix.base }}
pattern: ${{ matrix.pattern }}
- name: Should be affected
if: ${{ matrix.affected && !steps.affected.outputs.affected }}
run: |
echo "::error::Test failed: workspace ${{ matrix.workspace }} should be affected"
exit 1
- name: Should not be affected
if: ${{ !matrix.affected && steps.affected.outputs.affected }}
run: |
echo "::error::Test failed: workspace ${{ matrix.workspace }} should not be affected"
exit 1
complete:
if: ${{ github.event_name == 'pull_request' && always() }}
runs-on: ubuntu-latest
needs: [ lint, tests, action-tests ]
steps:
- name: Failed
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
run: exit 1
- name: Success
run: echo 'You are soooo curious ;)'
release:
if: ${{ github.event_name == 'push' }}
runs-on: ubuntu-latest
needs: [ action-tests ]
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.0
- name: Read package.json
id: info
run: echo "version=$(jq -r ".version" package.json)" >> $GITHUB_OUTPUT
- name: Tag version
id: tag
run: |
echo "::group::git fetch --tags"
git fetch --tags
echo "::endgroup::"
if [[ $(git tag -l $VERSION) == $VERSION ]]; then
echo "::notice::git tag $VERSION already exists"
else
git config user.name github-actions
git config user.email github-actions@github.com
git tag $VERSION
git push --tags
echo "notes=true" >> $GITHUB_OUTPUT
fi
env:
VERSION: v${{ steps.info.outputs.version }}
- name: Release notes
if: ${{ steps.tag.outputs.notes }}
uses: softprops/action-gh-release@v1
with:
name: ${{ steps.info.outputs.version }}
tag_name: v${{ steps.info.outputs.version }}
draft: true
generate_release_notes: true