chore: refresh content and add lint + link-check workflows#9
Conversation
Refresh README and CONTRIBUTING to match current Coder positioning (self-hosted CDEs and AI coding agents) and remove dead anchors, stale URLs, and commented-out placeholders that have sat unused since the original fork from awesome-pulumi. README: - Update Awesome badge to the canonical https://awesome.re source. - Restructure the header so the right-aligned logo no longer breaks the blockquote, and add alt text to the image. - Refresh the tagline to describe Coder as it positions itself today. - Drop the 2022 HashiCorp pull-quote. - Update Documentation, Blog, Discord, X (formerly Twitter), and other Official Resources links. Strip stale utm_* parameters from internal links. - Remove empty / commented-out sections: Books, Beginner Guides, What is Coder?, per-cloud headings, Comparison, Miscellaneous, Companies using Coder, and the standalone License heading. - Templates section now points at registry.coder.com as the canonical source instead of the in-tree examples directory and the duplicate community-templates.md. - Normalize bullet style and add one-line descriptions where needed so the file conforms to awesome-lint. - Fix minor copy: NodeJS -> Node.js, Kubevirt -> KubeVirt, vscode -> VS Code, Setup -> Set up, missing trailing periods. CONTRIBUTING: - Rewrite for Coder. Removes the leftover "Pulumi community" line inherited from awesome-pulumi. Automation: - Add markdownlint, awesome-lint, and lychee link-check workflows so the README stays current. - Add .markdownlint.jsonc mirroring coder/coder defaults. - Add issue templates for broken links and resource suggestions. This change was prepared by Coder Agents.
There was a problem hiding this comment.
Pull request overview
Refreshes the repository’s documentation to align with Coder’s current positioning and adds CI guardrails (markdown linting, awesome-lint, and link checking) to keep the awesome list consistent and prevent link drift over time.
Changes:
- Updated
README.mdandCONTRIBUTING.mdfor current messaging, cleaned up stale sections/links, and normalized list formatting. - Added GitHub Actions workflows for
markdownlint-cli2,awesome-lint, and scheduled/PR link checking vialychee. - Introduced shared lint/link-check configuration files plus issue templates for reporting broken links and suggesting resources.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Refreshes content/links and normalizes list entries for awesome-list conventions. |
| CONTRIBUTING.md | Rewrites contribution guidance to be Coder-specific and sets formatting expectations. |
| .markdownlint.jsonc | Adds markdownlint rule configuration for repo-wide markdown consistency. |
| .markdownlint-cli2.jsonc | Configures markdownlint-cli2 ignores. |
| .lycheeignore | Adds link-check ignore entries for bot-blocking hosts. |
| .github/workflows/markdownlint.yml | Runs markdownlint-cli2 on pushes/PRs. |
| .github/workflows/awesome-lint.yml | Runs awesome-lint on pushes/PRs. |
| .github/workflows/link-check.yml | Runs lychee on pushes/PRs and on a weekly schedule, opening issues on scheduled failures. |
| .github/ISSUE_TEMPLATE/suggest-resource.yml | Adds a structured issue form for suggesting new resources. |
| .github/ISSUE_TEMPLATE/broken-link.yml | Adds a structured issue form for reporting broken README links. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Restructure CI to align with coder/coder and coder/registry patterns: - Single ci.yaml workflow with format, lint-awesome, lint-typos, and link-check jobs, replacing three separate workflow files. - Add concurrency group so PR pushes cancel in-flight runs. - Drop markdownlint in favor of Prettier (via Bun) for formatting, the way coder/registry handles it. awesome-lint already covers the markdown rules that mattered for an awesome list. - Add crate-ci/typos for spell-checking, with .github/typos.toml declaring Coder community usernames and domain terms. - Add a separate zizmor workflow to lint GitHub Actions for security issues, matching coder/registry. - Pin all GitHub Actions to commit SHAs. Repository hygiene: - Add .github/PULL_REQUEST_TEMPLATE.md for contribution structure. - Rewrite issue templates as 1-broken-link.yaml and 2-suggest-resource.yaml to match coder/coder naming, with an ISSUE_TEMPLATE/config.yml directing general questions to docs, registry, Discord, and discussions. - Add .github/dependabot.yaml for weekly Actions and npm updates. - Add package.json, bun.lock, and .prettierignore so contributors and CI use the same Bun + Prettier toolchain as coder/registry. - Add .gitignore for node_modules. This change was prepared by Coder Agents.
Mail links are excluded by default now; passing the flag fails the action with 'unexpected argument'. This change was prepared by Coder Agents.
denbeigh2000/coder-templates was restructured into a single module; the aws-nixos, aws-spot-nixos, and aws-spot-nixos-graviton sub-paths are 404. Consolidate to a single entry pointing at the repo root. ElliotG/coder-oss-gke-tf was renamed to ElliotG/coder-oss-tf and redirects. The Tutorials bullet and the Automation bullet pointed at the same repo through the redirect, which awesome-lint flagged as a duplicate link once both URLs were canonicalized. Drop the Tutorials copy and keep the Automation entry, which is the natural home for 'provision Coder with Terraform'. PR and issue templates referenced ../blob/main/CONTRIBUTING.md, which is not a valid filesystem path and broke local file resolution in lychee. Switch to the absolute GitHub URL so the link works both as a clickable link and as a target lychee can verify. Verified locally with curl against every URL in the repo plus prettier, awesome-lint, and typos. This change was prepared by Coder Agents.
This change was prepared by Coder Agents.
lychee in ci.yaml already runs with --accept 200,206,403,429, which treats the bot-blocked responses from Medium, the Palantir blog, and Forrester as a valid status. The ignore file was belt-and-suspenders config that gave the false impression those URLs weren't being checked. The URLs are still structurally verified, we just accept their 403 response. This change was prepared by Coder Agents.
The coder/coder repository uses umbrelladocs/action-linkspector for docs link checking because it drives a real Chromium via Puppeteer and can resolve URLs that bot-blocking sites return non-200 statuses for. Mirror that approach here so the link-check behavior is consistent across coder/coder docs and coder/awesome-coder. Changes: - .github/.linkspector.yml mirrors coder/coder's config: dirs, an ignorePatterns list seeded with localhost / example.com / mailto and any host that blocks GitHub runner IPs, and aliveStatusCodes: [200]. - .github/workflows/link-check.yaml mirrors the two-job structure of coder/coder weekly-docs.yaml: a prepare job pins and caches Chrome via @puppeteer/browsers, then a check job runs action-linkspector with PUPPETEER_EXECUTABLE_PATH pointing at the cached binary. - step-security/harden-runner guards both jobs. - pnpm corepack workaround copied from coder/coder for the action-linkspector pnpm install bug (UmbrellaDocs/action-linkspector issue 54). - Reporter switches to github-pr-review on PR so failures show up as inline review comments, github-check otherwise. Drop the lychee check-links job from ci.yaml. The CI workflow keeps the lightweight, fast jobs (format, lint-awesome, lint-typos) and link checking moves to its own workflow file, matching how coder/coder separates docs link checking from its main CI. Validated locally by running linkspector with PUPPETEER_EXECUTABLE_PATH pointed at the installed Chrome: 'All hyperlinks in the specified files are valid.' This change was prepared by Coder Agents.
The previous SHA was actually actions/setup-go@v6, mis-pasted from coder/coder. setup-node@v6 resolves to 48b55a01. Caught by both the workflow itself failing to resolve the action and by zizmor's impostor_commit audit. This change was prepared by Coder Agents.
action-linkspector pipes linkspector through reviewdog and stays silent on success, so the log jumped from 'Running linkspector with reviewdog' straight to step exit with no visibility into what was checked. Add two steps before action-linkspector: - 'List URLs found in Markdown files' greps and sorts every URL the workflow is about to verify, so the log explicitly shows what is in scope. - 'Run linkspector (verbose log)' runs the linkspector CLI standalone with --showstat and --check-archived. --showstat prints the count summary (total links checked, working, failed, archived). --check- archived warns when a listed GitHub repository is archived, which is useful signal for a curated list. action-linkspector still runs (with if: always()) so the PR review comment integration that mirrors coder/coder/.github/workflows/ weekly-docs.yaml is preserved. This change was prepared by Coder Agents.
The previous regex tried to exclude apostrophes from the character class, which forced single-quote-inside-single-quote bash escaping that ended up mangled inside the YAML literal block. Bash failed with 'unexpected EOF while looking for matching ' on the runner. Use a simpler regex that does not include apostrophes (URLs in markdown almost never contain them, and our 35 URLs definitely don't), which lets the whole pattern stay inside one set of single quotes. Validated by extracting the run script from the YAML and running bash -n plus bash on it locally. This change was prepared by Coder Agents.
…zner entry setup-node was pinned to 20 while @puppeteer/browsers, puppeteer-core, ink, slice-ansi, and cli-truncate all require node >= 22. The job worked but emitted six 'npm warn EBADENGINE' lines on every run. Bump both jobs to node 22. Rename 'Run linkspector (verbose log)' to 'Run linkspector'. The parenthetical was a hint about why this step exists alongside the action-linkspector one; the surrounding comment block already explains it more clearly. Drop tmsmr/coder-hcloud from the Automation section. Linkspector's --check-archived flagged it; the repo has been formally archived since 2022, its last commit was 2022-12-11, and it depends on Coder OSS internals (docker-compose.yaml path, install flow, Hetzner cx11 SKU retired in 2024) that have moved. There is no active fork. This change was prepared by Coder Agents.
The original two-job structure mirrored coder/coder weekly-docs.yaml, which makes sense at the coder/coder docs scale (thousands of files, heavy Chrome cache reuse). For awesome-coder it is overkill: there are 2 markdown files, 39 URLs, and exactly one downstream consumer. The prepare job paid full runner spin-up overhead with no reuse to amortize it. Collapse into a single check-links job. Behavior is identical: same SHA-pinned actions, same Chrome build pin, same browser cache via actions/cache (which handles both restore and save in one step, so the cache/restore split that the two-job structure required goes away too). Chrome path now flows through a step output instead of a job output. Link-check stays in its own workflow file. The Chrome download and browser-based crawl are heavy compared to the format/lint/typos jobs in ci.yaml, and the schedule trigger plus paths filter belong with this workflow rather than complicating ci.yaml triggers. This change was prepared by Coder Agents.
The bullets in Official Resources were the only ones in the README not following the '[Name](url) - Description.' format that CONTRIBUTING.md asks contributors to use. Add one-line descriptions so the section matches the convention used in Tutorials, IDEs, Automation, Templates, and Talks. Addresses the Copilot review comment on PR #9. This change was prepared by Coder Agents.
bpmct
left a comment
There was a problem hiding this comment.
This PR is definitely an objective improvement and it seems like you linted some stuff and added a few links but I still don't think this PR makes the repo something I'd view as a vetted community resource.
I'd recommend spending some time thinking intentionally about what types of resources our community would want and pulling together some links from internal folks here, or cross-referencing other awesome lists. We don't have to do it all in this PR but I still think we have some more work before this is a good, revived, up-to-date awesome list.
| <!-- ## Books --> | ||
| - [Documentation](https://coder.com/docs) - Official Coder documentation, including install, admin, and contributor guides. | ||
| - [Blog](https://coder.com/blog) - Posts from the Coder team covering product updates, deployments, and technical deep dives. | ||
| - [Press kit & Brand styleguide](https://github.com/coder/presskit) - Logos, brand assets, and brand guidelines. |
There was a problem hiding this comment.
This repo is super outdated. Let's point people to coder.com/brand
| - [Press kit & Brand styleguide](https://github.com/coder/presskit) - Logos, brand assets, and brand guidelines. | |
| - [Press kit & brand style guide](https://coder.com/brand) - Logos, brand assets, and brand guidelines. |
There was a problem hiding this comment.
Done in ec03394. Switched the URL to coder.com/brand and renamed the entry to 'Press kit & brand style guide' to match your suggestion.
Replied on behalf of the author via Coder Agents.
bpmct
left a comment
There was a problem hiding this comment.
edit: I just re-read the PR description now I feel like an asshole haha. feel free to have your agent accept some of the basic suggestions I made and then we can do a follow-up PR with the new links :P
My bad. I should read more. Super dumb of me
Official Resources: - Press kit link points at coder.com/brand instead of the dormant coder/presskit GitHub repo. Rename to 'Press kit & brand style guide' (sentence case). - Drop coder/presentations: that repo is dormant. - Drop fosstodon.org/web/@CoderHQ: the Mastodon account is no longer actively posted to. Tutorials and Blog Posts: - Drop the 'Coder 101' blog post. It pre-dates the v2 reorg. IDEs: - Add coder.com/docs/user-guides/workspace-access as the canonical entry point for connecting from VS Code, JetBrains, Cursor, code-server, or the CLI. Automation: - Replace ElliotG/coder-oss-tf with the official Validated Architectures docs. The former is from the Coder OSS era and no longer reflects how we recommend deploying. Talks and Videos: - Add 'Introduction to Coder Workspaces' as a current-product intro video. - Add Ben Potter's 'Building the IDE Golden Path' talk. - Attribute the existing 'Your Next Workstation Is In The Cloud' talk to its speaker, Ketan Gangatirkar. Issue templates: - Drop 1-broken-link.yaml. Linkspector already runs on every PR and on a weekly schedule, so reporters do not need a separate broken- link issue template. - Rename 2-suggest-resource.yaml to 1-suggest-resource.yaml so the numeric prefix stays sequential after the removal. This change was prepared by Coder Agents.
Summary
Refresh
coder/awesome-coderso it reflects Coder's current positioning (self-hosted CDEs and AI coding agents) and add the lint and link-check guardrails the repo was missing. No new sections — this PR is purely hygiene and automation. A follow-up PR will add the modern Coder ecosystem (Registry, code-server, envbuilder, Desktop, AgentAPI, Terraform providers, etc.).What changed
README and CONTRIBUTING
coder.com/docs,coder.com/blog, canonical Discord invite,x.com/CoderHQ. Strip leftoverutm_*parameters.Books,Beginner Guides,What is Coder?, the per-cloud sub-headings,Comparison,Miscellaneous,Companies using Coder, and the standalone## Licenseheading (forbidden byawesome-lint).registry.coder.com/templates. The duplicate link tocoder/coder/examples/templates/community-templates.mdis removed; the curated third-party list is preserved.[Name](url) - Description.so the file matches the conventionCONTRIBUTING.mdasks contributors to use, andawesome-lintaccepts it.tmsmr/coder-hcloud: formally archived, last commit December 2022, hard-coded the now-retired Hetznercx11SKU. Flagged bylinkspector --check-archived.CONTRIBUTING.md— removes the leftover "Pulumi community" line that was inherited fromawesome-pulumiwhen this repo was forked.CI and tooling, modeled on
coder/registryandcoder/coderci.yamlwith three fast jobs:format(Prettier via Bun),lint-awesome,lint-typos. Mirrors the structure ofcoder/registry.link-check.yamlusingumbrelladocs/action-linkspectorwith cached Chrome, mirroringcoder/coder/.github/workflows/weekly-docs.yaml. Runs on PR, onmainpushes, on a weekly schedule, and viaworkflow_dispatch. A standalone linkspector step before the action prints every discovered URL and a stats table so the log is actually readable.--check-archivedflags archived repos in the curated list.zizmor.yamlaudits the workflow files on every PR that touches.github/workflows/**.dependabot.yamlupdates them weekly along with the npm devDependencies..github/typos.tomldeclares the Coder community usernames and domain terms thatcrate-ci/typoswould otherwise flag..github/PULL_REQUEST_TEMPLATE.mdandISSUE_TEMPLATE/{1-broken-link.yaml,2-suggest-resource.yaml,config.yml}followcoder/coder's style.Out of scope (follow-up PR)
coder/coder, Registry, envbuilder, envbox, preview), IDE Integrations (code-server, vscode-coder, jetbrains-coder, JetBrains Toolbox), Coder Desktop (macOS, Windows), AI Coding Agents (AgentAPI, Tasks docs), Terraform Providers, Modules.How I verified
Each change was checked locally before pushing:
GitHub Actions confirms the same three workflows (CI, Link check, zizmor) pass green on the PR.
This change was prepared by Coder Agents.