Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62f1f5900d |
No files matched your search
@@ -28,8 +28,20 @@ build:
|
||||
|
||||
# Bundles the built dist/, so the binary reports the version script/build
|
||||
# stamped.
|
||||
#
|
||||
# On Linux, nix's bun loads through a C library in the nix store, and a binary
|
||||
# bun compiles from itself keeps that loader. nix-collect-garbage can delete
|
||||
# that C library, and the binary then no longer starts.
|
||||
# A --target other than the host's makes bun use its downloaded release build,
|
||||
# which loads through the system's C library. That is tested only on x86-64,
|
||||
# with the baseline build, so other Linux machines are refused.
|
||||
build-bin: build
|
||||
nix-shell -p bun --run "bun build dist/bin/quak.js --compile --outfile bin/quak"
|
||||
case "$$(uname -s)-$$(uname -m)" in \
|
||||
Linux-x86_64) target=--target=bun-linux-x64-baseline ;; \
|
||||
Linux-*) echo "make build-bin: on Linux only x86-64 is supported" >&2; exit 1 ;; \
|
||||
*) target= ;; \
|
||||
esac; \
|
||||
nix-shell -p bun --run "bun build dist/bin/quak.js --compile $$target --outfile bin/quak"
|
||||
|
||||
install: build-bin
|
||||
mkdir -p ~/bin
|
||||
|
||||
@@ -138,7 +138,10 @@ requests. The "Library reference" below covers both.
|
||||
one binary and copies it to `~/bin/quak`. Besides what Getting Started needs,
|
||||
`make install` needs `make` and [nix](https://nixos.org/download). It uses bun,
|
||||
a JavaScript runtime, to bundle the built `dist/` into one executable. It runs
|
||||
bun through `nix-shell -p bun`.
|
||||
bun through `nix-shell -p bun`. On Linux it works on x86-64 only. There, the
|
||||
binary is built from bun's own release build rather than nix's bun, so it does
|
||||
not need the nix store. The first build downloads that release build into
|
||||
`~/.bun`.
|
||||
|
||||
Log in once with `~/bin/quak`, as the user the cron job will run as:
|
||||
|
||||
@@ -302,7 +305,7 @@ title, with unsafe characters replaced (see "File names from the server"). With
|
||||
original is kept in the cache as well.
|
||||
|
||||
A file ID that no collection holds gives `File <id> not found`, and the exit
|
||||
status is 1.
|
||||
status is 1. The option `--collection <id>` is accepted and ignored.
|
||||
|
||||
A live photo is a still image and a short video that Ente stores as one file.
|
||||
`get` writes both, each named after the title with its own extension, as Ente's
|
||||
@@ -1910,7 +1913,8 @@ These apply to people and to coding agents alike.
|
||||
`bin/clip-keyword-vectors` installs, by SHA-256 hash;
|
||||
- Node and yarn, when `script/bootstrap` installs them, by version.
|
||||
- Not pinned:
|
||||
- bun, which `make build-bin` takes from `nix-shell -p bun`;
|
||||
- bun, which `make build-bin` takes from `nix-shell -p bun`, and on Linux
|
||||
the release build of the same bun version that it downloads;
|
||||
- `make` and `git`, which `script/bootstrap` installs from the system
|
||||
package manager when they are missing, as every `Dockerfile` stage does;
|
||||
- `bash` and `curl`, which `script/bootstrap` installs the same way when it
|
||||
|
||||
@@ -123,6 +123,7 @@ program
|
||||
.description("Download and decrypt a single file")
|
||||
.argument("<fileID>", "File ID (from `quak files`)")
|
||||
.option("--out <path>", "Output file path")
|
||||
.option("--collection <id>", "Accepted for compatibility; ignored")
|
||||
.action((fileID: string, opts: { out?: string }) =>
|
||||
run(getCommand(context(), fileID, opts)),
|
||||
);
|
||||
@@ -132,6 +133,7 @@ program
|
||||
.description("Download and decrypt a thumbnail")
|
||||
.argument("<fileID>", "File ID (from `quak files`)")
|
||||
.option("--out <path>", "Output file path")
|
||||
.option("--collection <id>", "Accepted for compatibility; ignored")
|
||||
.action((fileID: string, opts: { out?: string }) =>
|
||||
run(getThumbCommand(context(), fileID, opts)),
|
||||
);
|
||||
|
||||
+2
-14
@@ -1,9 +1,8 @@
|
||||
/**
|
||||
* Tests for the retry options `bin/quak.ts` loads the saved session with
|
||||
* (`quak backup` gets the unattended ones, every other command the default),
|
||||
* each with the callbacks that log its requests and retries, for `quak files`
|
||||
* taking its collection ID as an optional argument, and for `quak get` and
|
||||
* `quak get-thumb` refusing `--collection`.
|
||||
* each with the callbacks that log its requests and retries, and for
|
||||
* `quak files` taking its collection ID as an optional argument.
|
||||
*
|
||||
* Each test runs `bin/quak.ts`, as the smoke test does, with its session loader
|
||||
* replaced by one that records the options it is given and reports no session,
|
||||
@@ -106,14 +105,3 @@ describe("bin/quak.ts files", () => {
|
||||
expect(await quak("files", "7")).toMatch(/^Not logged in/);
|
||||
});
|
||||
});
|
||||
|
||||
describe("bin/quak.ts get and get-thumb", () => {
|
||||
it.each(["get", "get-thumb"])(
|
||||
"%s refuses --collection as an unknown option",
|
||||
async (command) => {
|
||||
expect(await quak(command, "1", "--collection", "2")).toMatch(
|
||||
/^error: unknown option '--collection'/,
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
@@ -569,14 +569,14 @@ describe("files", () => {
|
||||
});
|
||||
|
||||
describe("get and get-thumb", () => {
|
||||
it("get finds a file in any album", async () => {
|
||||
it("get finds a file in any album without --collection", async () => {
|
||||
const out = join(root, "diagram.png");
|
||||
expect(await getCommand(context(), "200", { out })).toBe(0);
|
||||
expect(readFileSync(out)).toEqual(Buffer.alloc(7, 200));
|
||||
expect(stderr.text).toBe(`7 bytes -> ${out}\n`);
|
||||
});
|
||||
|
||||
it("get-thumb finds a file in any album", async () => {
|
||||
it("get-thumb finds a file in any album without --collection", async () => {
|
||||
const out = join(root, "thumb.jpg");
|
||||
expect(await getThumbCommand(context(), "200", { out })).toBe(0);
|
||||
expect(readFileSync(out)).toEqual(Buffer.alloc(3, 200));
|
||||
|
||||
Reference in new issue
Block a user