diff --git a/.gitignore b/.gitignore index bbe42e1..8a07a3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,13 @@ -# macOS-specific files +# mise local overrides (the committed .mise.toml is the shared config) +.mise.local.toml +mise.local.toml + +# environment variables +.env +.env.* + +# editor and OS cruft .DS_Store +.idea/ +.vscode/ +*.swp diff --git a/.mise.toml b/.mise.toml index 8fff695..2b2ace3 100644 --- a/.mise.toml +++ b/.mise.toml @@ -40,3 +40,20 @@ run = "./scripts/refresh-icons.sh" description = "Remove build output and dependencies" dir = "docs" run = "rm -rf dist node_modules .astro" + +# A `run` list, not `depends`: mise runs dependencies in parallel, and these +# three have to happen in this order. +[tasks.ci] +description = "Run everything the CI build job runs, in the same order" +run = ["mise run docs-install", "mise run docs-check", "mise run docs-build"] + +[tasks.ci-watch] +description = "Watch GitHub Actions CI for the current branch; exits non-zero on failure" +run = """ +sleep 5 +remote_url=$(git remote get-url upstream 2>/dev/null || git remote get-url origin) +repo=$(echo "$remote_url" | sed -E 's|^.*github\\.com[:/]||; s|\\.git$||') +run_id=$(gh run list --repo "$repo" --branch "$(git branch --show-current)" --limit 1 --json databaseId --jq '.[0].databaseId') +if [ -z "$run_id" ]; then echo "No run found for current branch on $repo" >&2; exit 1; fi +gh run watch --repo "$repo" --exit-status "$run_id" +""" diff --git a/AGENTS.md b/AGENTS.md index eef9649..1087fec 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,8 @@ # AGENTS.md +This file (`AGENTS.md`) is the canonical agent configuration. `CLAUDE.md` is a +symlink to this file. + Source for , an Astro Starlight landing page for the [Lab271](https://github.com/Lab271) organization. The site lives in `docs/` (a subdirectory, not the repo root) so it can sit alongside repo-level tooling like @@ -24,8 +27,15 @@ mise run docs-check # astro check (type/content check) mise run docs-build # static build into docs/dist mise run docs-repos # regenerate docs/src/data/repos.json from the Lab271 org (needs `gh` auth) mise run docs-icons # re-export the favicon PNGs from src/assets/badge.svg (needs librsvg) +mise run docs-preview # serve the production build locally +mise run docs-clean # remove dist, node_modules and .astro +mise run ci # docs-install, docs-check, docs-build, as CI runs them +mise run ci-watch # follow the GitHub Actions run for the current branch ``` +Run `mise run ci` before pushing, and `mise run ci-watch` after. Local success +is not proof the workflow passes; only the real run is. + When starting the dev server directly (not via mise), use background mode: `astro dev --background`, then `astro dev stop`/`status`/`logs`. @@ -49,6 +59,8 @@ When starting the dev server directly (not via mise), use background mode: docs-repos` rather than editing by hand. - `scripts/refresh-repos.mjs`: what `mise run docs-repos` runs. Plain node, no dependencies, so it works without `bun install`. + - `agents/issue-tracker.md`: the issue tracker and labels in use. Not part of + the site; Astro only builds `docs/src/`. - `.github/workflows/ci.yml`: build and type-check on push/PR, plus a `zizmor` job auditing the workflows themselves. - `.github/workflows/deploy.yml`: builds and publishes `docs/dist` to GitHub @@ -60,6 +72,26 @@ When starting the dev server directly (not via mise), use background mode: afterwards instead of relying on the push event. - `.github/dependabot.yml`: weekly updates for the `docs/` bun lockfile and the GitHub Actions used in workflows. +- `LICENSE`: proprietary, all rights reserved. The repository is public so + GitHub Pages can serve it, not so it can be reused. +- `CONTRIBUTING.md`: this repository does not take third-party contributions. + Issues reporting a broken or inaccurate page are still welcome. + +## Agent skills + +### Git remote + +Use GitHub with the `gh` CLI. The remote is +. + +### Issue tracker + +Use GitHub issues. See `docs/agents/issue-tracker.md`. + +### Triage labels + +Use needs-triage, needs-info, ready-for-agent, ready-for-human, wontfix. See +`docs/agents/issue-tracker.md`. ## Branding @@ -102,7 +134,10 @@ meantime. The rules that shaped what is here: (customer, demo, infrastructure and thesis repos). `docs-repos` filters to public sources, and hand-written sections must do the same. - Third-party GitHub Actions are pinned to a full commit SHA with a trailing - `# vX.Y.Z` comment; Dependabot bumps them. + `# vX.Y.Z` comment; Dependabot bumps them. Audit with + `GH_TOKEN=$(gh auth token) zizmor --collect=all --strict-collection .github/` + and scope it to `.github/`: a bare `zizmor .` walks `docs/node_modules` and + reports on vendored dependencies' own workflows. - `@astrojs/check` doesn't yet support TypeScript's native (7.x) compiler API, so `docs/package.json` pins `typescript` to `^6`. See `.github/dependabot.yml` for the corresponding ignore rule. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..a52e5d0 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,96 @@ +# Code of Conduct + +## Our Goal + +We aim to make participation in our community a harassment-free experience +for everyone. + +We aim to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Any conduct which could reasonably be considered inappropriate in a +professional setting is unacceptable. + +## Moderation + +Community leaders should take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the ability to remove or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and should communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to [@lsimons](https://github.com/lsimons) or, if you would rather not go to an individual maintainer, to [abuse@schubergphilis.com](mailto:abuse@schubergphilis.com). Complaints will be reviewed and investigated. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved for a specified period of time. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 2.0, +available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..fea5ccb --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,40 @@ +# Contributing + +This repository holds the source for , the Lab271 +open source landing page. It is maintained by Schuberg Philis and is **not +open to third-party contributions**: it is a company-branded page, and its +content and design are ours to decide. + +That does not mean feedback is unwelcome. Two things are useful: + +- **Something on the page is wrong, broken or out of date.** Open an + [issue](https://github.com/Lab271/lab271.github.io/issues). Wrong links, + a project described inaccurately, a broken layout and accessibility + problems are all worth reporting. +- **You found a security problem.** Do not open an issue. Follow + [SECURITY.md](SECURITY.md) instead. + +Note that the list of repositories on the page is generated, not hand-written. +It comes from the public, licensed repositories in the +[Lab271](https://github.com/Lab271) organization, refreshed weekly by +`.github/workflows/refresh-repos.yml`. To get a project listed or delisted, +change the repository itself (its visibility, license or description) rather +than this site. + +Everyone taking part is expected to follow the +[Code of Conduct](CODE_OF_CONDUCT.md). Anything in this repository is governed +by its [License](LICENSE). + +## For maintainers + +Setup, tasks and layout are in [README.md](README.md); the branding rules and +the conventions an agent needs are in [AGENTS.md](AGENTS.md). + +- Work on a branch and open a pull request; `main` is what deploys. +- `mise run ci` runs the same install, type-check and build that + `.github/workflows/ci.yml` runs. Run it before pushing. +- After pushing, `mise run ci-watch` follows the real run. +- Keep this repository structurally aligned with its sibling, + [schubergphilis.github.io](https://github.com/schubergphilis/schubergphilis.github.io): + same layout, same tasks, same workflows, diverging only on branding and + content. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7f80102 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Proprietary License + +Copyright 2026 Schuberg Philis B.V. All rights reserved. + +This repository is published publicly so that the site it builds can be +served from GitHub Pages. Publication does not grant a license to reuse it. + +No part of this repository may be copied, modified, distributed, +sublicensed, published, or used in any form, in whole or in part, without +the prior written permission of the copyright holder. + +The Lab271 and Schuberg Philis names, logos, wordmarks and other brand +assets in this repository are trademarks of Schuberg Philis B.V. and are +not licensed for use. + +The software is provided "as is", without warranty of any kind, express +or implied. + +For permissions or inquiries, contact the copyright holder. diff --git a/README.md b/README.md index 103283d..2964d4c 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,12 @@ mise run docs-install # bun install mise run docs-dev # dev server at http://localhost:4321/ mise run docs-build # static build into docs/dist mise run docs-repos # regenerate the repo list from the Lab271 org +mise run ci # install, check and build, exactly as CI does +mise run ci-watch # follow the GitHub Actions run for the current branch ``` +`mise tasks` lists all of them. + ## Publish Every push to `main` runs `.github/workflows/deploy.yml`, which builds @@ -32,13 +36,20 @@ The Pages source must be set to "GitHub Actions" in the repository settings. - `docs/`: the Astro Starlight site. Landing page: `docs/src/content/docs/index.mdx`. - `.mise.toml`: pinned tools and dev/build tasks (run with `mise run `). -- `.github/workflows/`: `ci.yml` (build and check on PRs) and `deploy.yml` - (publish on push to main). +- `.github/workflows/`: `ci.yml` (build and check on PRs), `deploy.yml` + (publish on push to main) and `refresh-repos.yml` (weekly repo-list refresh). -Branding follows the Lab271 brand kit; see [AGENTS.md](AGENTS.md) for the rules -the theme implements. +Branding follows the Lab271 design refresh; see [AGENTS.md](AGENTS.md) for the +rules the theme implements. ## Contributing This repository is maintained by Schuberg Philis and is not open to -third-party contributions. +third-party contributions. Reports of a broken or inaccurate page are welcome: +see [CONTRIBUTING.md](CONTRIBUTING.md), and +[SECURITY.md](SECURITY.md) for anything security-related. + +## License + +Proprietary, all rights reserved. See [LICENSE](LICENSE). The repository is +public so GitHub Pages can serve the site, not so the source can be reused. diff --git a/docs/.gitignore b/docs/.gitignore index 148f96b..6240da8 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -19,6 +19,3 @@ pnpm-debug.log* # macOS-specific files .DS_Store - -# generated font cache for scripts/refresh-marks.py -scripts/.font-cache/ diff --git a/docs/agents/issue-tracker.md b/docs/agents/issue-tracker.md new file mode 100644 index 0000000..9e0da9f --- /dev/null +++ b/docs/agents/issue-tracker.md @@ -0,0 +1,39 @@ +# Issue tracker: GitHub + +Issues for this project are managed as GitHub issues. + +The issues live in the same remote as the source code (the GitHub default): +. + +Use the `gh` CLI for all operations. + +You can learn about the `gh` issue CLI with `gh issue --help`. + +Note this file sits at `docs/agents/` for consistency with the other +Schuberg Philis repositories. `docs/` is also the Astro site root here, but +Astro only builds `docs/src/`, so nothing in `docs/agents/` is published. + +## Labels + +The following issue labels are used: + +``` +NAME DESCRIPTION COLOR +bug Something isn't working #d73a4a +documentation Improvements or additions to documentation #0075ca +enhancement New feature or request #a2eeef +needs-triage Maintainer needs to evaluate this issue #e6e6fa +needs-info Waiting on reporter for more information #e6e6fa +ready-for-agent Fully specified, ready for an autonomous agent #e6e6fa +ready-for-human Requires human implementation #e6e6fa +wontfix This will not be worked on #ffffff +``` + +The repository also carries GitHub's stock labels (`duplicate`, +`good first issue`, `help wanted`, `invalid`, `question`) and two applied by +automation to pull requests (`dependencies`, `javascript`). Prefer the set +above when triaging. + +`good first issue` and `help wanted` are misleading here: this repository is +not open to third-party contributions (see `CONTRIBUTING.md`). Do not apply +them.