Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
5acaa7a
refactor(crypt): EME with the steps and the names of the paper
sntran Oct 17, 2026
763d82f
fix(crypt): an empty name decrypts to an empty name
sntran Oct 17, 2026
bb39650
refactor(crypt): AES-256 of node:crypto in place of aes-js
sntran Oct 17, 2026
3d689ca
build: Node.js only, with no Deno
sntran Oct 17, 2026
c724622
fix(obscure): import the key at its first use
sntran Oct 17, 2026
8b32b82
build: each module imports its packages, with no deps.js
sntran Oct 17, 2026
49f284b
build: compatibility date 2026-09-01
sntran Oct 17, 2026
fb45d86
refactor: own code in place of @std/fmt, @std/ini and @std/media-types
sntran Oct 17, 2026
4eda740
fix(config): the default file of rclone when no file exists
sntran Oct 17, 2026
48f4bda
build: wrangler.toml is the configuration of the Pages project rfetch
sntran Oct 17, 2026
4ca3853
feat(lib): decodePath and escapeHTML for the backends
sntran Oct 17, 2026
b95bcf4
test: a shared test suite for the backends, as fstests of rclone
sntran Oct 17, 2026
8a1e57b
fix(memory): pass the shared test suite
sntran Oct 17, 2026
e6e94aa
fix(local): pass the shared test suite, and stay in the root folder
sntran Oct 17, 2026
565e17b
fix(lsjson): give the names with no percent-encoding
sntran Oct 17, 2026
725d950
docs: the contract of a backend and its shared tests
sntran Oct 17, 2026
8028fa5
feat(ini): read and write the file as rclone does, with a streaming p…
sntran Oct 17, 2026
8a36404
fix(config): the remote names of rclone, and 400 for an option that t…
sntran Oct 17, 2026
ff5969a
docs: format CONTRIBUTING.md with deno fmt
sntran Oct 17, 2026
4e52ccd
feat(ini): ConfigFile keeps the comments and the text of the file
sntran Oct 17, 2026
d7bbb4b
fix(config): keep the comments of the person in the file
sntran Oct 17, 2026
36174a8
feat(crypt): the cipher of rclone, with its test vectors
sntran Oct 17, 2026
b11f5a8
fix(crypt): pass the shared test suite, with no password in the links
sntran Oct 17, 2026
d894a38
test(crypt): the same as rclone 1.75.1 in the two directions
sntran Oct 17, 2026
e72209b
refactor(lib): one module for the lists of folders
sntran Oct 17, 2026
9e2e4f5
test(lib): skip names, write through other backends, and clean up
sntran Oct 17, 2026
6d991b7
fix(alias): pass the shared test suite
sntran Oct 17, 2026
baa3c20
feat(lib): read sizes as rclone
sntran Oct 17, 2026
ef717e2
fix(chunker): the format of rclone, on the shared test suite
sntran Oct 17, 2026
29d123b
feat(lib): read the list options of rclone
sntran Oct 17, 2026
228e672
fix(http): the http backend of rclone, on the shared test suite
sntran Oct 17, 2026
3b8fd8c
style: format main.js and _config.yml
sntran Oct 17, 2026
bda5f7a
fix: read the paths of remotes as rclone
sntran Oct 17, 2026
a4b1664
ci: run the tests with rclone and Go, and check the format
sntran Oct 17, 2026
2d743ca
fix(ci): run the tests against rclone, and fail when they skip
sntran Oct 17, 2026
6841fb8
refactor: the backends import nothing of rfetch
sntran Oct 17, 2026
ffad9dc
feat(lib): ranges of bytes, as RFC 9110
sntran Oct 17, 2026
2c1d013
feat: ranges in the backends memory, local, http and chunker
sntran Oct 17, 2026
efa8d8e
feat(crypt): ranges with the seek of rclone
sntran Oct 17, 2026
95c941d
fix(lib): write times as rclone lsjson
sntran Oct 17, 2026
475c3d5
fix(local): cut the times of files to the millisecond
sntran Oct 17, 2026
55bd7c7
fix(lsjson): names with ? and # with --recursive, and connection strings
sntran Oct 17, 2026
2ed1697
feat(lib): read and write the XML of S3
sntran Oct 17, 2026
fcaeb61
feat(s3): sign requests with the Signature Version 4 of AWS
sntran Oct 17, 2026
8a3613c
test(lib): suite options for buckets and for no empty folders
sntran Oct 17, 2026
8b2f7e4
feat(s3): the s3 backend
sntran Oct 17, 2026
3dd7b11
refactor: backends call the global fetch for their remotes
sntran Oct 17, 2026
2839bc8
refactor: move the code of one backend into its folder
sntran Oct 17, 2026
d692274
refactor: each backend is an npm workspace
sntran Oct 17, 2026
f62b083
refactor: lib is the workspace @rfetch/lib, with no packages folder
sntran Oct 17, 2026
c8949b6
feat(lib): the options of a backend, from the query, the headers and env
sntran Oct 17, 2026
87c8596
feat: backends read their options from headers and env
sntran Oct 17, 2026
712b960
feat: remotes and options from the headers of a request
sntran Oct 17, 2026
6f3c902
fix(test): the time of a file in the shared suite, with whole seconds
sntran Oct 18, 2026
aa0edf3
feat: RFETCH_ as the primary prefix of the options, RCLONE_ for compa…
sntran Oct 18, 2026
58d1d8a
feat(lsjson): the init of the requests of a list
sntran Oct 18, 2026
2c375f9
feat(worker): each path through the rfetch fetch, and lists as JSON
sntran Oct 18, 2026
359cf82
test(bench): cases of a benchmark in Node.js and in workerd
sntran Oct 18, 2026
6a035df
perf(mod): read only the variables RFETCH_ and RCLONE_ of process.env
sntran Oct 18, 2026
19b3c67
perf(lib): one number format and one collator for all the lists
sntran Oct 18, 2026
3364d34
perf(lib): readListing with no handler of end tags
sntran Oct 18, 2026
21c8fde
perf(lsjson): read the lists with readListing
sntran Oct 18, 2026
5a60d39
perf(crypt): the blocks in WebAssembly, and scrypt of node:crypto
sntran Oct 18, 2026
0ea470e
perf(memory): bytes in place of a Blob, and the children of each folder
sntran Oct 18, 2026
532790c
fix(crypt): the same bytes of secretbox.wasm on each machine
sntran Oct 18, 2026
cefad25
fix(lsjson): a path to a folder with no / at the end lists the folder
sntran Oct 18, 2026
455e104
perf(local): reads of 1 MiB, and the stats of a list at the same time
sntran Oct 18, 2026
9ab42af
test(bench): the commands of rfetch against the commands of rclone
sntran Oct 18, 2026
4703d36
perf(cli): load only the module of the command
sntran Oct 18, 2026
0f6a61d
perf(lib): HTMLRewriter at its first use, in chunks of 8 KiB in Node.js
sntran Oct 18, 2026
d5be83e
test(bench): the commands of rfetch on each runtime against rclone
sntran Oct 18, 2026
d1133f0
perf(lib): read and write the lists with no HTMLRewriter
sntran Oct 18, 2026
d7f3063
feat(local): absolute local paths and ../, as rclone
sntran Oct 18, 2026
b6e28f6
fix(cli): the errors and the exit codes of rclone, and the pipe
sntran Oct 18, 2026
29db3f9
feat(local): the ModTime of rclone, in nanoseconds
sntran Oct 18, 2026
f64d297
perf(crypt): XSalsa20 with SIMD, 4 blocks at a time
sntran Oct 18, 2026
5381518
perf(crypt): join the small chunks of a stream only for a whole block
sntran Oct 18, 2026
4aef935
fix(serve): a client sets no option of the remote
sntran Oct 18, 2026
f2e5f34
fix(lib): read HTML with lol-html again, not with a parser of rfetch
sntran Oct 18, 2026
a969d9b
fix(serve): serve the folder of the remote, with all its options
sntran Oct 18, 2026
b6933d9
docs(readme): the time of the commands on each runtime and with rclone
sntran Oct 18, 2026
2143813
test(lib): the property of readListing makes only names of files
sntran Oct 18, 2026
2603acd
fix(cli): a value after a space for each flag, as rclone
sntran Oct 18, 2026
781d6e5
fix(lsjson): the time of a folder with no time, and the times of http…
sntran Oct 18, 2026
c58f0f2
fix(lists): ls, lsl, lsd and lsf write the lines of rclone
sntran Oct 18, 2026
4a82b02
refactor(lists): a LineStream in place of listLines
sntran Oct 18, 2026
04880f3
docs: Bun 1.4 or later
sntran Oct 18, 2026
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
114 changes: 114 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# The checks of each push and of each pull request:
#
# - npm test: the tests, with the oldest Node.js of package.json and the
# newer versions. The job installs rclone and Go, thus the tests that
# compare rfetch with rclone and with Go run too.
# - deno fmt --check: the format of the files.
# - wasm: the tests of the crate of backend/crypt/secretbox.wasm, and its
# build from its source gives the same bytes as the file in the repository.
#
# This workflow deploys nothing: the Pages project deploys the branches.
name: CI

on:
push:
pull_request:

permissions:
contents: read

# A new push to a branch stops the old run of that branch.
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
runs-on: ubuntu-24.04
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
node: [22, 24, 26]
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: npm

# Go runs the tests of backend/http/list.js against encoding/csv.
- uses: actions/setup-go@v5
with:
go-version: stable
cache: false

# rclone reads each variable RCLONE_NAME as the flag --name. Thus the
# version is not in a variable RCLONE_VERSION of the job: rclone reads
# it as the flag --version, and fails.
- name: Install rclone
env:
VERSION: 1.75.1
SHA256: 982b5aa772841168f8e380f139e9e787b2a105403e32b94da8676a0e1c0a13ab
run: |
mkdir -p "$HOME/bin" "$RUNNER_TEMP/rclone"
cd "$RUNNER_TEMP/rclone"
zip="rclone-v$VERSION-linux-amd64.zip"
curl -fsSLO "https://downloads.rclone.org/v$VERSION/$zip"
echo "$SHA256 $zip" | sha256sum -c -
unzip -q "$zip"
install -m 755 "rclone-v$VERSION-linux-amd64/rclone" "$HOME/bin/rclone"
"$HOME/bin/rclone" version
echo "$HOME/bin" >> "$GITHUB_PATH"
echo "RCLONE=$HOME/bin/rclone" >> "$GITHUB_ENV"

- run: npm ci

# A test against rclone or Go skips when the tool is not installed.
# Here the tools are installed, thus such a skip is an error.
- name: npm test
shell: bash
run: |
npm test 2>&1 | tee "$RUNNER_TEMP/test.log"
if grep -E "(rclone|Go) is not installed" "$RUNNER_TEMP/test.log"; then
echo "::error::A test skipped because a tool is not installed."
exit 1
fi

format:
runs-on: ubuntu-24.04
timeout-minutes: 5
steps:
- uses: actions/checkout@v4

- uses: denoland/setup-deno@v2
with:
deno-version: 2.9.6

- run: deno fmt --check

wasm:
runs-on: ubuntu-24.04
timeout-minutes: 10
defaults:
run:
working-directory: backend/crypt/native
steps:
- uses: actions/checkout@v4

# The compiler of rust-toolchain.toml, with the target of WebAssembly.
- name: Install Rust
run: |
channel=$(sed -n 's/^channel = "\(.*\)"$/\1/p' rust-toolchain.toml)
rustup toolchain install "$channel" --profile minimal \
--target wasm32-unknown-unknown

# The tests compare each box with the crate crypto_secretbox, on the
# machine of the job.
- run: cargo test --locked

- run: ./build.sh

- name: Compare with the file in the repository
run: git diff --exit-code -- ../secretbox.wasm
1 change: 0 additions & 1 deletion .npmrc

This file was deleted.

4 changes: 0 additions & 4 deletions .vscode/settings.json

This file was deleted.

Loading
Loading