Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Editor defaults for files Biome does not format (Markdown, YAML, SQL, shell,
# and Python). Biome reads this file too, but biome.json's settings win.
root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.py]
indent_size = 4

[*.md]
trim_trailing_whitespace = false

# The license texts stay as REUSE downloaded them.
[LICENSES/**]
charset = unset
end_of_line = unset
indent_style = unset
indent_size = unset
insert_final_newline = unset
trim_trailing_whitespace = unset
10 changes: 10 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Store text files with LF endings, on every platform.
* text=auto eol=lf

# The license texts stay byte for byte as REUSE downloaded them.
LICENSES/** -text

# Generated or vendored: collapse them in diffs and leave them out of the
# language statistics.
bun.lock linguist-generated
src/vendor/** linguist-vendored
11 changes: 11 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## What changes

<!-- What a reader of the site, or a contributor, sees. Name the site: vortex.dev, bench, or both. -->

## How it was checked

<!-- The commands you ran and what you looked at. For a visual change, add before and after screenshots. -->

- [ ] Every commit is signed off (`git commit -s`), for the DCO check.
- [ ] `bun run check:ci` passes.
- [ ] Each new image or other asset has an annotation in `REUSE.toml`.
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ jobs:
- name: Type check
run: bun run typecheck

# knip finds unused files, exports and dependencies. It runs after the
# build for the same reason tsc does: it resolves `#site/content` to
# .velite/, which the build writes.
- name: Unused code and dependencies
run: bun run knip

- name: Unit tests
run: bun run test

Expand Down
65 changes: 65 additions & 0 deletions .github/workflows/links.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Links

# Checks the external links in the blog: the posts in src/content/blog and the
# posts on other sites that the blog index lists (src/content/links.ts).
# `bun run verify` already checks the site's internal links on every PR.
#
# Not a required check, so a broken link never blocks a merge. It runs:
# - weekly, because a page on another site can disappear at any time
# - on a PR that changes the blog's content, to catch a mistyped link
# - by hand (workflow_dispatch)
# The job summary lists each broken link.

on:
schedule:
- cron: "0 9 * * 1"
pull_request:
paths:
- "src/content/**"
- ".github/workflows/links.yml"
workflow_dispatch:

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

permissions:
contents: read

jobs:
lychee:
name: External links
runs-on: ubuntu-26.04
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

# The action downloads the lychee binary named by lycheeVersion from
# lychee's GitHub releases. The job has read-only contents access and no
# secrets, so that binary can read only the public repository.
#
# Excluded hosts block automated requests, so they fail when the page is
# there: LinkedIn answers 999, and the ACM Digital Library (doi.org
# 10.1145) answers 403. The action passes the job's GitHub token, which
# raises GitHub's rate limit. lychee 0.24.2 checks a file named here
# whatever its extension (the run counts 106 links with or without
# --extensions). The flag names `ts` anyway, because lychee's default
# extension list, which filters what it finds in directories, has no
# `ts`.
- name: Check links
uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0
with:
lycheeVersion: v0.24.2
args: >-
--no-progress
--max-retries 3
--timeout 30
--accept 200..=299,429
--extensions mdx,ts
--exclude '^https://(www\.)?linkedin\.com/'
--exclude '^https://doi\.org/10\.1145/'
--exclude '^https://dl\.acm\.org/'
'src/content/**/*.mdx'
src/content/links.ts
Comment thread
lwwmanning marked this conversation as resolved.
Resolved
2 changes: 1 addition & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"recommendations": ["tailwindcss.tailwindcss-intellisense", "biomejs.biome"]
"recommendations": ["biomejs.biome"]
}
9 changes: 1 addition & 8 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,5 @@
},
"[css]": {
"editor.formatOnSave": false
},
"tailwindCSS.classAttributes": [
"class",
"className",
".*ClassName",
"ngClass",
".*Styles"
]
}
}
Loading
Loading