Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(practs): bump practs to latest best #34

Merged
merged 1 commit into from
Jul 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .depcheckrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ ignores:
- declapract-typescript-ehmpathy
- ts-jest
- husky
- test-fns
4 changes: 3 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ module.exports = {
sourceType: 'module', // Allows for the use of imports
},
rules: {
'@typescript-eslint/explicit-function-return-type': 'off', // this can be figured out implicitly, and that is better
'@typescript-eslint/explicit-module-boundary-types': 'warn', // makes code-reviews easier + code quality better by explicitly defining outputs of exported functions+classes
'@typescript-eslint/explicit-function-return-type': 'off', // prefer '@typescript-eslint/explicit-module-boundary-types' since it only requires the check on exported functions+classes
'sort-imports': 'off',
'import/prefer-default-export': 'off', // default export = bad
'import/no-default-export': 'error', // require named exports - they make it easier to refactor, enforce consistency, and increase constraints
Expand Down Expand Up @@ -42,5 +43,6 @@ module.exports = {
'@typescript-eslint/lines-between-class-members': 'off',
'no-return-await': 'off', // this does not help anything and actually leads to bugs if we subsequently wrap the return in a try catch without remembering to _then_ add await
'@typescript-eslint/return-await': 'off',
'@typescript-eslint/no-unsafe-declaration-merging': 'off', // dobjs are built off of this
},
};
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# exclude package-lock from git diff; https://stackoverflow.com/a/72834452/3068233
package-lock.json -diff
46 changes: 46 additions & 0 deletions .github/workflows/.install.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: .install

on:
workflow_call:
outputs:
node-modules-cache-key:
description: a max(stable) cache key to the node modules of this commit's dependencies
value: ${{ jobs.npm.outputs.node-modules-cache-key }}

jobs:
npm:
runs-on: ubuntu-20.04
outputs:
node-modules-cache-key: ${{ steps.cache.outputs.cache-primary-key }}
steps:
- name: checkout
uses: actions/checkout@v3

- name: set node-version
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'

- name: node-modules deps hash
id: deps-hash
run: |
PACKAGE_DEPS_HASH=$(jq '.packages' package-lock.json | jq 'del(."".version)' | md5sum | awk '{print $1}');
echo "PACKAGE_DEPS_HASH=$PACKAGE_DEPS_HASH"
echo "package-deps-hash=$PACKAGE_DEPS_HASH" >> "$GITHUB_OUTPUT"
- name: node-modules cache get
uses: actions/cache/restore@v3
id: cache
with:
path: ./node_modules
key: ${{ runner.os }}-node-${{ steps.deps-hash.outputs.package-deps-hash }}

- name: node-modules cache miss install
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci --ignore-scripts --prefer-offline --no-audit

- name: node-modules cache set
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: ./node_modules
key: ${{ steps.cache.outputs.cache-primary-key }}
44 changes: 44 additions & 0 deletions .github/workflows/.publish-npm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: .publish-npm

on:
workflow_call:
secrets:
npm-auth-token:
required: true
description: required credentials to authenticate with the aws account under which to publish

jobs:
install:
uses: ./.github/workflows/.install.yml

publish:
runs-on: ubuntu-20.04
needs: [install]
steps:
- name: checkout
uses: actions/checkout@v3

- name: set node-version
uses: actions/setup-node@v3
with:
registry-url: 'https://registry.npmjs.org/'
node-version-file: '.nvmrc'

- name: node-modules cache get
uses: actions/cache/restore@v3
id: cache
with:
path: ./node_modules
key: ${{ needs.install.outputs.node-modules-cache-key }}

- name: node-modules cache miss install
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci --ignore-scripts --prefer-offline --no-audit

- name: build
run: npm run build

- name: publish
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.npm-auth-token }}
213 changes: 213 additions & 0 deletions .github/workflows/.test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
name: .test

on:
workflow_call:
inputs:
aws-region:
type: string
description: the aws region within which we should run the tests
required: false
aws-account-id:
type: string
description: the id of the account the credentials are expected to access
required: false
secrets:
aws-access-key-id:
required: false
description: required credentials to authenticate with aws the aws account against which to run the tests
aws-secret-access-key:
required: false
description: required credentials to authenticate with aws the aws account against which to run the tests

jobs:
# install the dependencies
install:
uses: ./.github/workflows/.install.yml

# run tests in parallel
test-commits:
runs-on: ubuntu-20.04
needs: [install]
steps:
- name: checkout
uses: actions/checkout@v3
with:
fetch-depth: 0 # we need all commits to test:commits

- name: set node-version
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'

- name: get node-modules from cache
uses: actions/cache/restore@v3
with:
path: ./node_modules
key: ${{ needs.install.outputs.node-modules-cache-key }}

- name: test:commits
run: npm run test:commits

test-types:
runs-on: ubuntu-20.04
needs: [install]
steps:
- name: checkout
uses: actions/checkout@v3

- name: set node-version
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'

- name: get node-modules from cache
uses: actions/cache/restore@v3
with:
path: ./node_modules
key: ${{ needs.install.outputs.node-modules-cache-key }}

- name: test:types
run: npm run test:types

test-format:
runs-on: ubuntu-20.04
needs: [install]
steps:
- name: checkout
uses: actions/checkout@v3

- name: set node-version
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'

- name: get node-modules from cache
uses: actions/cache/restore@v3
with:
path: ./node_modules
key: ${{ needs.install.outputs.node-modules-cache-key }}

- name: test:format
run: npm run test:format

test-lint:
runs-on: ubuntu-20.04
needs: [install]
steps:
- name: checkout
uses: actions/checkout@v3

- name: set node-version
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'

- name: get node-modules from cache
uses: actions/cache/restore@v3
with:
path: ./node_modules
key: ${{ needs.install.outputs.node-modules-cache-key }}

- name: test:lint
run: npm run test:lint

test-unit:
runs-on: ubuntu-20.04
needs: [install]
steps:
- name: checkout
uses: actions/checkout@v3

- name: set node-version
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'

- name: get node-modules from cache
uses: actions/cache/restore@v3
with:
path: ./node_modules
key: ${{ needs.install.outputs.node-modules-cache-key }}

- name: test:unit
run: THOROUGH=true npm run test:unit

test-integration:
runs-on: ubuntu-20.04
needs: [install]
steps:
- name: checkout
uses: actions/checkout@v3

- name: set node-version
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'

- name: get node-modules from cache
uses: actions/cache/restore@v3
with:
path: ./node_modules
key: ${{ needs.install.outputs.node-modules-cache-key }}

- name: configure aws credentials
if: "${{ inputs.aws-account-id != '' }}"
uses: aws-actions/configure-aws-credentials@v1
id: credentials
with:
aws-access-key-id: ${{ secrets.aws-access-key-id }}
aws-secret-access-key: ${{ secrets.aws-secret-access-key }}
aws-region: ${{ inputs.aws-region }}

- name: confirm aws credentials
if: "${{ inputs.aws-account-id != '' }}"
run: |
[[ ${{steps.credentials.outputs.aws-account-id}} != ${{ inputs.aws-account-id }} ]] \
&& echo 'wrong aws account' && exit 1 \
|| echo 'correct aws account';

- name: provision:integration-test-db
run: npm run provision:integration-test-db --if-present

- name: test:integration
run: THOROUGH=true npm run test:integration

test-acceptance-locally:
runs-on: ubuntu-20.04
needs: [install]
steps:
- name: checkout
uses: actions/checkout@v3

- name: set node-version
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'

- name: get node-modules from cache
uses: actions/cache/restore@v3
with:
path: ./node_modules
key: ${{ needs.install.outputs.node-modules-cache-key }}

- name: configure aws credentials
if: "${{ inputs.aws-account-id != '' }}"
uses: aws-actions/configure-aws-credentials@v1
id: credentials
with:
aws-access-key-id: ${{ secrets.aws-access-key-id }}
aws-secret-access-key: ${{ secrets.aws-secret-access-key }}
aws-region: ${{ inputs.aws-region }}

- name: confirm aws credentials
if: "${{ inputs.aws-account-id != '' }}"
run: |
[[ ${{steps.credentials.outputs.aws-account-id}} != ${{ inputs.aws-account-id }} ]] \
&& echo 'wrong aws account' && exit 1 \
|| echo 'correct aws account';

- name: provision:integration-test-db
run: npm run provision:integration-test-db --if-present

- name: test:acceptance:locally
run: npm run test:acceptance:locally
39 changes: 0 additions & 39 deletions .github/workflows/publish-on-tag.yml

This file was deleted.

20 changes: 20 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: publish

on:
push:
tags:
- v*

concurrency:
group: ${{ github.workflow }}-${{ github.ref }} # per [workflow] x [branch, tag]
cancel-in-progress: true # cancel workflows for non-latest commits

jobs:
test:
uses: ./.github/workflows/.test.yml

publish:
uses: ./.github/workflows/.publish-npm.yml
needs: [test]
secrets:
npm-auth-token: ${{ secrets.NPM_TOKEN }}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: pr-release-on-main
name: release

on:
push:
Expand Down
Loading
Loading