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
5 changes: 2 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,8 @@ command line. Last, it encrypts and decrypts a file with the `age` verb and a te
identity.

`task check` does not examine a change to `README.md`. For that change, the review is the check.
Seven repositories link to headings of `README.md`: ctan, dropbox, github, gnu, nongnu, site
and tlnet. Do not change the text of these headings. If you change it, the links from
these repositories cannot find them:
The other repositories of the org link to headings of `README.md`. Do not change the text of
these headings. If you change it, the links from those repositories cannot find them:

- `#secrets`
- `#storage`
Expand Down
24 changes: 12 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ that, you can read each section without the other sections.
```mermaid
flowchart LR
subgraph up["Upstreams"]
u1["CTAN, GNU and Savannah, over rsync"]
u1["Trees over rsync, for example CTAN and GNU"]
u2["GitHub, over the API and git"]
u3["Dropbox, over the API"]
end
Expand All @@ -60,10 +60,10 @@ flowchart LR
Each mirror has the structure of this diagram, with one upstream and one sink. There are two
types of mirror:

- A public mirror (ctan, tlnet, gnu and nongnu) copies an rsync tree into a bucket, and a
domain serves the bucket. The bucket is the mirror.
- A private mirror (github and dropbox) copies an account into Proton Drive. Its bucket
contains only the data that the next run uses.
- A public mirror copies an rsync tree into a bucket, and a domain serves the bucket. The
bucket is the mirror.
- A private mirror copies an account into Proton Drive. Its bucket contains only the data
that the next run uses.

The two types of mirror do a run with the same steps:

Expand Down Expand Up @@ -924,10 +924,10 @@ A full CTAN mirror is approximately 140 GB: approximately $2.10 a month, at $0.0
GB-month.

R2 has a free tier for each account, not for each bucket. The free tier is 10 GB-month of
storage, 1 million Class A operations and 10 million Class B operations each month. All six
buckets are in one account, and ctan, gnu and nongnu use all of the free tier. Thus, each
README gives gross costs: storage only, at $0.015 for each GB-month, with no free tier
subtracted.
storage, 1 million Class A operations and 10 million Class B operations each month. All the
buckets of katoptra are in one account, and the largest mirrors use all of the free tier.
Thus, each README gives gross costs: storage only, at $0.015 for each GB-month, with no free
tier subtracted.

The engines use these facts about R2:

Expand Down Expand Up @@ -1009,8 +1009,8 @@ from GHCR. A run does not build an image, and it does not use Docker Hub.

| Variant | Base | Tools | For |
|---|---|---|---|
| `rsync` | ubuntu 24.04 | rsync, gpgv, xz, curl, perl (shasum), go-task, AWS CLI v2 with only s3 and sts | rsync upstreams into a bucket: ctan, tlnet, gnu, nongnu |
| `proton` | python 3.13 slim | proton-drive, age, git, go-task, boto3, requests, pytest, ruff, and `s3`, a boto3 script that gets and puts objects | Proton Drive sinks: github with the proton engine, dropbox with its Python |
| `rsync` | ubuntu 24.04 | rsync, gpgv, xz, curl, perl (shasum), go-task, AWS CLI v2 with only s3 and sts | rsync upstreams into a bucket |
| `proton` | python 3.13 slim | proton-drive, age, git, go-task, boto3, requests, pytest, ruff, and `s3`, a boto3 script that gets and puts objects | Proton Drive sinks, with the proton engine or with the Python of the mirror |

The two images have these properties:

Expand Down Expand Up @@ -1053,7 +1053,7 @@ There are two types of pin, with one policy:
The two tags move. When they move, a change to a verb or a tool goes into each mirror at its
next run.
- Each mirror pins each `uses:` of a lib workflow to the commit of a release, and
Dependabot updates it. The repositories of the four public mirrors have an Actions
Dependabot updates it. The repositories of the public mirrors have an Actions
policy: each `uses:` must have a full SHA. The other repositories pin each `uses:` with
the same method.

Expand Down
3 changes: 1 addition & 2 deletions engines/rsync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,7 @@ tasks:
# rejects a vars input that validate-vars.sh does not accept. Ceiling: a different
# caller that gives text that is not safe to `task sync --`. Upgrade path: make sure
# here that the value is a number. Then do `task render-update` in lib and in each
# rsync mirror (ctan, tlnet, gnu and nongnu). The render.txt of each records this
# line.
# rsync mirror. The render.txt of each records this line.
- >-
awk -F'\t' -v OFS='\t' -v CAP=$(({{.BATCH_GB | default 4}} * 1000000000)) -v DIR={{.RUN}} -v TL="{{.TL}}" '
index($1, TL "/tlpkg/") == 1 || $1 !~ /\// { dec[++nd] = $0; next }
Expand Down
Loading