Skip to content

Commit

Permalink
Merge pull request #159 from inpsyde/static-analysis-js
Browse files Browse the repository at this point in the history
  • Loading branch information
shvlv authored Sep 18, 2024
2 parents 4a4c5f3 + 960ec5f commit 1d33ebd
Show file tree
Hide file tree
Showing 2 changed files with 153 additions and 0 deletions.
96 changes: 96 additions & 0 deletions .github/workflows/static-analysis-js.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
name: Static code analysis JavaScript

on:
workflow_call:
inputs:
NPM_REGISTRY_DOMAIN:
description: Domain of the private npm registry.
default: https://npm.pkg.github.com/
required: false
type: string
NODE_VERSION:
description: Node version with which the static analysis is to be executed.
default: 18
required: false
type: string
NODE_OPTIONS:
description: Space-separated list of command-line Node options.
type: string
default: ''
required: false
secrets:
NPM_REGISTRY_TOKEN:
description: Authentication for the private npm registry.
required: false
GITHUB_USER_EMAIL:
description: Email address for the GitHub user configuration.
required: false
GITHUB_USER_NAME:
description: Username for the GitHub user configuration.
required: false
GITHUB_USER_SSH_KEY:
description: Private SSH key associated with the GitHub user passed as `GITHUB_USER_NAME`.
required: false
ENV_VARS:
description: Additional environment variables as a JSON formatted object.
required: false

jobs:
static-analysis-js:
timeout-minutes: 5
runs-on: ubuntu-latest
env:
NODE_OPTIONS: ${{ inputs.NODE_OPTIONS }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_REGISTRY_TOKEN }}
NODE_CACHE_MODE: ''
GITHUB_USER_EMAIL: ${{ secrets.GITHUB_USER_EMAIL }}
GITHUB_USER_NAME: ${{ secrets.GITHUB_USER_NAME }}
GITHUB_USER_SSH_KEY: ${{ secrets.GITHUB_USER_SSH_KEY }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up custom environment variables
env:
ENV_VARS: ${{ secrets.ENV_VARS }}
if: ${{ env.ENV_VARS }}
uses: actions/github-script@v7
with:
script: |
JSON
.parse(process.env.ENV_VARS)
.forEach(envVar => core.exportVariable(envVar.name, envVar.value));
- name: Set up SSH
if: ${{ env.GITHUB_USER_SSH_KEY != '' }}
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ env.GITHUB_USER_SSH_KEY }}

- name: Set up Git
run: |
git config --global user.email "${{ env.GITHUB_USER_EMAIL }}"
git config --global user.name "${{ env.GITHUB_USER_NAME }}"
- name: Set up node cache mode
run: |
if [ -f "${GITHUB_WORKSPACE}/package-lock.json" ] || [ -f "${GITHUB_WORKSPACE}/npm-shrinkwrap.json" ]; then
echo "NODE_CACHE_MODE=npm" >> $GITHUB_ENV
else
echo "No lock files found"
fi
- name: Set up node
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.NODE_VERSION }}
registry-url: ${{ inputs.NPM_REGISTRY_DOMAIN }}
cache: ${{ env.NODE_CACHE_MODE }}

- name: Install dependencies
env:
ARGS: ${{ env.NODE_CACHE_MODE == 'npm' && 'ci' || 'install' }}
run: ${{ format('npm {0}', env.ARGS) }}

- name: Run tsc
run: ./node_modules/.bin/tsc --noEmit --skipLibCheck --pretty false
57 changes: 57 additions & 0 deletions docs/js.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
<!-- markdownlint-disable MD024 -->

# Reusable workflows – JavaScript

## Unit tests JavaScript
Expand Down Expand Up @@ -56,3 +58,58 @@ jobs:
NODE_VERSION: 14
JEST_ARGS: 'my-test --reporters=jest-junit --coverage'
```

## Static analysis JavaScript

This workflow runs
the [TypeScript compiler](https://www.typescriptlang.org/docs/handbook/compiler-options.html) with
the `--noEmit` argument. It does so by executing the `tsc` binary in the `./node_modules/.bin/`
folder.

**Simplest possible example:**

```yml
name: Static code analysis JavaScript
on:
push:
jobs:
static-analysis-js:
uses: inpsyde/reusable-workflows/.github/workflows/static-analysis-js.yml@main
```

### Configuration parameters

#### Inputs

| Name | Default | Description |
|-----------------------|---------------------------------|-----------------------------------------------------|
| `NODE_OPTIONS` | `''` | Space-separated list of command-line Node options |
| `NODE_VERSION` | `18` | Node version with which the assets will be compiled |
| `NPM_REGISTRY_DOMAIN` | `'https://npm.pkg.github.com/'` | Domain of the private npm registry |

#### Secrets

| Name | Description |
|-----------------------|------------------------------------------------------------------------------|
| `NPM_REGISTRY_TOKEN` | Authentication for the private npm registry |
| `GITHUB_USER_EMAIL` | Email address for the GitHub user configuration |
| `GITHUB_USER_NAME` | Username for the GitHub user configuration |
| `GITHUB_USER_SSH_KEY` | Private SSH key associated with the GitHub user passed as `GITHUB_USER_NAME` |
| `ENV_VARS` | Additional environment variables as a JSON formatted object |

**Example with configuration parameters:**

```yml
name: Static code analysis JavaScript
on:
pull_request:
jobs:
static-analysis-js:
uses: inpsyde/reusable-workflows/.github/workflows/static-analysis-js.yml@main
secrets:
NPM_REGISTRY_TOKEN: ${{ secrets.NPM_REGISTRY_TOKEN }}
ENV_VARS: >-
[{"name":"EXAMPLE_USERNAME", "value":"${{ secrets.USERNAME }}"}]
with:
NODE_VERSION: 18
```

0 comments on commit 1d33ebd

Please sign in to comment.