mirror of
https://github.com/awalsh128/cache-apt-pkgs-action.git
synced 2026-08-25 18:34:48 +00:00
120 lines
6.2 KiB
Markdown
120 lines
6.2 KiB
Markdown
# Contributing
|
|
|
|
This document contains maintainer-oriented notes that are intentionally separated from the user-facing README.
|
|
|
|
## Development Environment
|
|
|
|
`./scripts/dev` containing all development related concerns. To get started after cloning the repository you
|
|
can run `./scripts/dev/setup_devenv.mts run --ide [your IDE]`. This will setup some of the common settings and
|
|
extensions typically used. You do not have to use this though.
|
|
|
|
To quickly establish credentials you can run `./scripts/dev/gh_auth.sh`. It is just a helper script to get you
|
|
authenticated with GitHub.
|
|
|
|
```sh
|
|
|
|
```
|
|
|
|
## Workflow Concerns
|
|
|
|
### Quality and Security
|
|
|
|
Primary CI is defined in [.github/workflows/ci.yml](.github/workflows/ci.yml).
|
|
|
|
- Triggers: `pull_request`, nightly `schedule`, and `workflow_dispatch`.
|
|
- This workflow is the merge gate for PRs; it does not publish releases.
|
|
- Job groups by concern:
|
|
- Setup and build artifact reuse via [.github/actions/setup/action.yml](.github/actions/setup/action.yml).
|
|
- Static quality gates: lint and typecheck.
|
|
- Test quality gates: test suite and type coverage threshold.
|
|
- Security gates: CodeQL analysis and dependency audit (`npm audit --audit-level=high --omit=dev`).
|
|
- Coverage: Codecov upload from `coverage/lcov.info`.
|
|
|
|
### Pull Request Branch Policy
|
|
|
|
- Branch policy is enforced by [.github/workflows/pr.yml](.github/workflows/pr.yml) and [scripts/ops/pr_checks.mts](scripts/ops/pr_checks.mts).
|
|
- Feature branches should target `staging`.
|
|
- `main` only accepts merges from `staging`.
|
|
- A release-bot role has bypass permission for the `main` and `staging` branch protections.
|
|
|
|
Pull request policy checks are defined in [.github/workflows/pr.yml](.github/workflows/pr.yml).
|
|
|
|
- Triggered on PR open/update/reopen/edited events.
|
|
- Runs `npm run check:pr` to enforce branch policy and pinned action ref validation.
|
|
- Pull requests into `main` must come from `staging`.
|
|
- Treat short-lived task branches as disposable and prefer deleting them after merge.
|
|
|
|
### Branch Sync and Merge Policy
|
|
|
|
Branch ancestry enforcement is defined in [.github/workflows/branch-sync.yml](.github/workflows/branch-sync.yml).
|
|
|
|
- Triggered on pushes to `main`, on a daily schedule, and manually via `workflow_dispatch`.
|
|
- Verifies that `staging` remains an ancestor of `main`.
|
|
- `staging` into `main` should preserve ancestry with a merge commit; squash and rebase merges break this guardrail.
|
|
- If `staging` ancestry is broken, repair it immediately with a merge-commit-based sync before taking further releases.
|
|
|
|
### Release and Publishing
|
|
|
|
Release automation is defined in [.github/workflows/release.yml](.github/workflows/release.yml) and uses semantic-release.
|
|
|
|
- Triggers: push to `main` or `staging`, plus `workflow_dispatch`.
|
|
- `staging` produces prereleases on the `next` channel with `rc` suffixes.
|
|
- `main` produces stable releases and deploys API docs to GitHub Pages.
|
|
- semantic-release updates package metadata as part of its own prepare/commit flow.
|
|
- The release-bot GitHub App token is used so the release job can publish, tag, and push release commits back to the branch that triggered it.
|
|
|
|
Release configuration is in [release.config.ts](release.config.ts).
|
|
|
|
## Conventional Commits
|
|
|
|
semantic-release determines version bump level from commit messages.
|
|
|
|
Examples:
|
|
|
|
```bash
|
|
git commit -m "fix(parser): handle empty package output"
|
|
git commit -m "feat(manager): add availability check"
|
|
git commit -m "feat!: remove deprecated API"
|
|
```
|
|
|
|
## Repository Scripts
|
|
|
|
Repository scripts are grouped under [scripts/dev](scripts/dev) and [scripts/ops](scripts/ops).
|
|
|
|
- [check_latest_action_pin.mts](scripts/ops/check_latest_action_pin.mts): checks whether pinned GitHub Action refs are up to date against upstream releases.
|
|
- [check_release_tag.mts](scripts/ops/check_release_tag.mts): validates release tag format and consistency with `package.json` version.
|
|
- [create_testcase_logs.mts](scripts/dev/create_testcase_logs.mts): regenerates command execution logs used by integration/parser fixtures.
|
|
- [hotfix_pr.mts](scripts/dev/hotfix_pr.mts): automates hotfix branch creation and PR creation/update flow.
|
|
- [gh_sync.mts](scripts/dev/gh_sync.mts): synchronizes repository settings, rulesets, variables, and tags JSON. **These are not for source control** since they leak information.
|
|
- [setup_devenv.mts](scripts/dev/setup_devenv.mts): bootstraps local developer dependencies, workspace settings, and npm audit remediation.
|
|
- [node_ver.mts](scripts/dev/node_ver.mts): verifies or updates Node version alignment across repo files and local Node installation.
|
|
|
|
## Integration Test Notes
|
|
|
|
Integration test suite is [test/ubuntu.integration.test.ts](test/ubuntu.integration.test.ts).
|
|
|
|
- These tests execute real APT commands and are environment-sensitive.
|
|
- They are intentionally narrower than unit tests to keep runtime manageable.
|
|
- Mutating package operations should use locking for safety when applicable.
|
|
|
|
## Docs and Publishing
|
|
|
|
- API docs are generated into [docs/api](docs/api) and are generated during the release process, not
|
|
committed to source.
|
|
- Release workflow publishes package artifacts and deploys docs via GitHub Pages.
|
|
|
|
## Operational Concerns
|
|
|
|
- Node.js baseline is managed in [package.json](package.json) engines.
|
|
- Keep `package-lock.json` committed and synchronized with dependency changes.
|
|
- Prefer updating workflow action SHAs with care and validate in CI.
|
|
- Prefer full commit SHA pinning for all third-party GitHub Actions.
|
|
- Repository settings, rulesets, variables, and tags are synchronized via `scripts/dev/gh_sync.mts`.
|
|
- Repository settings are tracked in [.github/repo-settings.json](.github/repo-settings.json) and can be applied with `npm run repo:settings:upload`.
|
|
- Repository rulesets are tracked in [.github/repo-rulesets.json](.github/repo-rulesets.json) and can be applied with `npm run repo:rulesets:upload`.
|
|
- Repository variables are tracked in `.github/repo-vars.json` and can be applied with `npm run repo:vars:upload`.
|
|
- Repository tags are tracked in `.github/repo-tags.json` and can be applied with `npm run repo:tags:upload`.
|
|
- Use `npm run repo:all:download` and `npm run repo:all:upload` to synchronize every tracked GitHub metadata target in one pass.
|
|
- Prefer explicit status checks and branch protections over informal merge discipline.
|
|
- Keep release automation branch-based and semantic-release driven.
|