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

Optimize GitHub action workflows for Go and Node #69

Merged

Conversation

svengreb
Copy link
Owner

Resolves #68

Before all jobs were summarized in the `ci` workflow [1] but not
separated by their scope, i.e. Go and Node specific tasks. The workflow
was also not optimized to only run when specific files have been changed
which resulted in false-positive executions and wasted limited free tier
and developer time.
Therefore the `ci` workflow has been optimized by splitting it into new
`ci-go` and `ci-node` workflows.

>> CI Go

The new `ci-go` workflow...

- only runs when any `*.go` file has been modified. See the extensive
  GitHub action documentations about `on.<push|pull_request>.paths` [4]
  and the filter pattern cheat sheet [5] for more details.
- only runs for `ubuntu-latest` instead of a matrix with `macos-latest`
  and `windows-latest` which should be added for projects with platform
  specific code.

>> CI Node

The new `ci-node` workflow...

- only runs when any `*.js`, `*.json`, `*.md`, `*.yaml` and `*.yml` file
  has been modified. This matches the lint-staged [2], Prettier and
  remark configurations. See the extensive GitHub action documentations
  about `on.<push|pull_request>.paths` [4] and the filter pattern cheat
  sheet [5] for more details.
- only runs for `ubuntu-latest` instead of a matrix with `macos-latest`
  and `windows-latest` which should be added for projects with platform
  specific code.
- uses cache `npm` dependencies which is possible as of
  `actions/setup-node@v2.2.0` [3].

>> Silent linting errors for CI/CD environments

When running the configured linting tasks [6] the Prettier CLI [7]
prints matches to the standard output with a visual preview of the file
content and a marker at the specific element. When files that store
secret data, e.g. when encrypted with `git-crypt` [8], are decrypted in
the GitHub Actions [9] this could leak this data when Prettier finds
errors in these files.
To prevent these case new CI specific linting tasks have been added with
a `silent` `loglevel` [10]. This however comes with the drawback that
possible linting errors must be analyzed locally, but the code quality
is still ensured by blocking subsequent workflows.

[1]: https://github.com/svengreb/tmpl-go/blob/c20ba3bd/.github/workflows/ci.yml
[2]: https://github.com/svengreb/tmpl-go/blob/c20ba3bd/lint-staged.config.js#L12
[3]: https://github.com/actions/setup-node/releases/tag/v2.2.0
[4]: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestpaths
[5]: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
[6]: https://github.com/svengreb/tmpl-go/blob/c20ba3bd/package.json#L28
[7]: https://prettier.io/docs/en/cli.html
[8]: svengreb/antarctica#170
[9]: https://github.com/svengreb/antarctica/blob/0e6abe44/.github/workflows/ci-go.yaml#L29-L32
[10]: https://prettier.io/docs/en/cli.html#--loglevel

GH-68
@svengreb svengreb added this to the Next milestone Nov 20, 2021
@svengreb svengreb self-assigned this Nov 20, 2021
@svengreb svengreb merged commit c3ff68b into main Nov 20, 2021
@svengreb svengreb deleted the improvement/gh-68-optimize-gh-action-workflows-go-node branch November 20, 2021 09:23
@svengreb svengreb removed their assignment Nov 20, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Optimize GitHub action workflows for Go and Node
1 participant