Skip to content

Commit

Permalink
feat(ci): adds more CI validations, introduces semantic release (#74)
Browse files Browse the repository at this point in the history
- Adds eslint check on before commit and in CI
- Adds commit lint in CI for main
- Uses semantic release
  • Loading branch information
ygrishajev committed Apr 17, 2024
1 parent 7f11ac8 commit 2683bf5
Show file tree
Hide file tree
Showing 24 changed files with 12,072 additions and 4,792 deletions.
13 changes: 11 additions & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@
},
"plugins": ["@typescript-eslint"],
"rules": {
"@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }]
}
"@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }],
"@typescript-eslint/no-explicit-any": "warn"
},
"overrides": [
{
"files": ["*.js"],
"rules": {
"@typescript-eslint/no-var-requires": "off"
}
}
]
}
30 changes: 0 additions & 30 deletions .github/workflows/build.yml

This file was deleted.

33 changes: 33 additions & 0 deletions .github/workflows/commit-lint-reusable.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Commit Lint

on:
- workflow_call

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
HUSKY: 0

jobs:
duplicate-check:
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
concurrent_skipping: 'never'
skip_after_successful_duplicate: 'true'

commit-lint:
if: needs.duplicate-check.outputs.should_skip != 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Validate PR commits with commitlint
uses: wagoid/commitlint-github-action@v6
10 changes: 10 additions & 0 deletions .github/workflows/commit-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Commit Lint Feature Check

on:
- push

jobs:
commit-lint:
name: Main
uses: ./.github/workflows/commit-lint-reusable.yml
secrets: inherit
46 changes: 46 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Lint

on:
- pull_request

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
HUSKY: 0

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
ref: main

- name: Setup Node.js
id: setup_node
uses: actions/setup-node@v4
with:
node-version: 18.0.0

- name: Restore node_modules cache
id: deps-cache
uses: martijnhols/actions-cache/restore@v3
with:
path: node_modules
key: ${{ runner.os }}-build-ts-deps-cache-${{ hashFiles('ts/package-lock.json') }}

- name: Install dependencies
if: steps.deps-cache.outputs.cache-hit != 'true'
run: npm install

- name: Lint
run: npm run lint

- name: Cache node modules
if: steps.deps-cache.outputs.cache-hit != 'true'
uses: martijnhols/actions-cache/save@v3
with:
path: node_modules
key: ${{ runner.os }}-build-ts-deps-cache-${{ hashFiles('ts/package-lock.json') }}
36 changes: 0 additions & 36 deletions .github/workflows/npm.yml

This file was deleted.

55 changes: 55 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Release from Master on Push

on:
push:
branches:
- main

concurrency:
group: ${{ github.ref }}
cancel-in-progress: true

env:
HUSKY: 0

jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
ref: main

- name: Fetch other branches for commitlint
run: git fetch --prune --unshallow

- name: Setup Node.js
if: steps.changes.outputs.ts == 'true'
uses: actions/setup-node@v4
with:
node-version: 18.0.0
cache: npm

- name: Install dependencies
run: npm install

- name: Validate PR commits with commitlint
uses: wagoid/commitlint-github-action@v6

- name: Lint
run: npm run lint

- name: Test
run: npm run test:cov

- name: Release npm package
uses: cycjimmy/semantic-release-action@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Upload Test Coverage
uses: codecov/codecov-action@v4
with:
files: ./ts/coverage
token: ${{ secrets.CODECOV_TOKEN }}
51 changes: 51 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Test

on:
- pull_request

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
HUSKY: 0

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
ref: main

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18.0.0
cache: npm

- name: Restore node_modules cache
id: deps-cache
uses: martijnhols/actions-cache/restore@v3
with:
path: node_modules
key: ${{ runner.os }}-build-ts-deps-cache-${{ hashFiles('ts/package-lock.json') }}

- name: Install dependencies
run: npm install

- name: Test
run: npm run test:cov

- name: Upload Test Coverage
uses: codecov/codecov-action@v4
with:
files: ./ts/coverage
token: ${{ secrets.CODECOV_TOKEN }}

- name: Cache node modules
if: steps.deps-cache.outputs.cache-hit != 'true'
uses: martijnhols/actions-cache/save@v3
with:
path: node_modules
key: ${{ runner.os }}-build-ts-deps-cache-${{ hashFiles('ts/package-lock.json') }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ umd/

# Coverage directory
.nyc_output/
coverage

# Log files
yarn-error.log
Expand Down
1 change: 1 addition & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
npx --no -- commitlint --edit $1
31 changes: 31 additions & 0 deletions .releaserc
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
[
"@semantic-release/changelog",
{
"changelogFile": "CHANGELOG.md"
}
],
[
"@semantic-release/npm",
{
"tarballDir": "package"
}
],
[
"@semantic-release/github",
{
"assets": "package/*.tgz"
}
],
"@semantic-release/git"
],
"branches": [
{
"name": "main"
}
],
"preset": "conventionalcommits"
}
27 changes: 25 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,29 @@ const signedMessage = await client.signAndBroadcast(

Additional examples can be found in the [examples directory]( https://github.com/ovrclk/akashjs/tree/main/)

## contributing
## Contribution Guidelines

### Project Stack

This repository is primarily written in TypeScript and uses Node.js version 18. We use Webpack 5 for UMD bundling. These tools ensure that our development environment is consistent and our builds are stable.

### Automated CI Checks and Releases

Our project enforces high standards of code quality and consistency to ensure that all contributions adhere to our guidelines and maintain a high level of reliability. Here's what you should be aware of when contributing to our repository:

- **Code Linting**: We use ESLint to analyze the code for potential errors and coding style issues. This ensures that all contributions maintain a consistent style and follow best practices.

- **Code Formatting**: Prettier is configured to format code automatically. This helps keep our codebase clean and readable without requiring manual adjustments for styling.

- **Commit Linting**: All commit messages must adhere to the Conventional Commits specification. This is enforced through automated linting of commits, helping us keep our project history clear and easy to navigate. See [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) for more information.

- **Automated Testing**: Upon creating a pull request, automated tests are run to verify that the new code does not break any existing functionality and meets all testing standards.

- **Semantic Release**: When changes are merged into the `main` branch, a semantic release process is triggered. This process automatically determines version numbers and generates changelogs based on the commit messages, streamlining the release process and ensuring consistent versioning.

- **Continuous Integration**: Our CI workflows are designed to validate pull requests and manage releases. They perform multiple checks including fetching other branches for commit validation, linting, and testing code coverage before merging changes.

### Contributing

PRs are welcome! By adhering to these guidelines and leveraging our automated systems, we can maintain a high-quality codebase and streamline our development processes. We appreciate your contributions to making this project even better!

This repository uses node 16, and yarn 1.2+, webpack 5 for umd bundling and is written in typescript. PRs are welcome.
1 change: 1 addition & 0 deletions commitlint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = { extends: ["@commitlint/config-conventional"] };
2 changes: 1 addition & 1 deletion jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const common = {
};

module.exports = {
collectCoverageFrom: ["./src/**/*.{js,ts}"],
collectCoverageFrom: ["./src/**/*.{js,ts}", "!./src/protobuf/**/*"],
projects: [
{
displayName: "unit",
Expand Down
Loading

0 comments on commit 2683bf5

Please sign in to comment.