diff --git a/.github/workflows/deploy-publicsite.yml b/.github/workflows/deploy-publicsite.yml index 5fcc78ca..5316ec46 100644 --- a/.github/workflows/deploy-publicsite.yml +++ b/.github/workflows/deploy-publicsite.yml @@ -27,7 +27,6 @@ concurrency: jobs: deploy: - if: github.event_name != 'push' || github.event.head_commit.author.email != 'release-bot@archivebox.io' environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} @@ -51,6 +50,22 @@ jobs: env: BASE_URL: http://archivebox.localhost:8000 + - name: Verify gallery was generated from this exact revision + run: | + uv run --no-cache --no-sync python - <<'PY' + import json + import os + import tomllib + from pathlib import Path + + provenance = json.loads(Path("publicsite/screenshots/build.json").read_text()) + version = tomllib.loads(Path("pyproject.toml").read_text())["project"]["version"] + assert provenance["revision"] == os.environ["GITHUB_SHA"], provenance + assert provenance["version"] == version, provenance + assert provenance["capture_count"] >= 3 * 35, provenance + assert len(provenance["files"]) == provenance["capture_count"], provenance + PY + - name: Setup Pages uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5 diff --git a/Dockerfile b/Dockerfile index 81795c61..856ec7ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,10 +10,10 @@ # --build-context abx-plugins=../abx-plugins \ # -t archivebox/abx-dl:dev # docker buildx build . -f Dockerfile \ -# --build-arg ABX_DL_IMAGE=archivebox/abx-dl:1.12.188 \ +# --build-arg ABX_DL_IMAGE=archivebox/abx-dl:1.12.225 \ # -t archivebox:multistage -ARG ABX_DL_IMAGE=archivebox/abx-dl:1.12.188 +ARG ABX_DL_IMAGE=archivebox/abx-dl:1.12.225 FROM archivebox/sonic:1.4.9 AS sonic FROM ${ABX_DL_IMAGE} AS archivebox-runtime-base @@ -156,19 +156,20 @@ PY --no-install-project \ --no-install-workspace \ --no-sources -ABXPKG_NO_CACHE=True abxpkg env --install --binproviders=env,apt --lib="$ABXPKG_LIB_DIR" --overrides='{"apt":{"install_args":["binutils"]}}' strip >/dev/null +builder_abxpkg_lib_dir=/tmp/archivebox-builder-abxpkg +ABXPKG_NO_CACHE=True abxpkg env --install --binproviders=env,apt --lib="$builder_abxpkg_lib_dir" --overrides='{"apt":{"install_args":["binutils"]}}' strip >/dev/null /usr/bin/find /venv/lib/python3.*/site-packages -type f -name '*.so' -print0 > /tmp/archivebox-native-libraries while IFS= read -r -d '' native_library; do magic='' if IFS= read -r -N 4 magic < "$native_library" && [[ "$magic" == $'\x7fELF' ]]; then - "$ABXPKG_LIB_DIR/env/bin/strip" --strip-unneeded "$native_library" || exit $? + "$builder_abxpkg_lib_dir/env/bin/strip" --strip-unneeded "$native_library" || exit $? fi done < /tmp/archivebox-native-libraries rm -f /tmp/archivebox-native-libraries rm -f /venv/bin/uv /venv/bin/uvx -abxpkg run --binproviders=env --lib="$ABXPKG_LIB_DIR" apt-get purge -y binutils build-essential gcc libldap2-dev libsasl2-dev libssl-dev -abxpkg run --binproviders=env --lib="$ABXPKG_LIB_DIR" apt-get autoremove -y -/usr/bin/find "$ABXPKG_LIB_DIR/env/bin" -maxdepth 1 -type l -name strip -delete +abxpkg run --binproviders=env --lib="$builder_abxpkg_lib_dir" apt-get purge -y binutils build-essential gcc libldap2-dev libsasl2-dev libssl-dev +abxpkg run --binproviders=env --lib="$builder_abxpkg_lib_dir" apt-get autoremove -y +rm -rf "$builder_abxpkg_lib_dir" rm -rf /venv/lib/python3.*/site-packages/pip* \ /venv/lib/python3.*/site-packages/wheel* \ /venv/bin/pip /venv/bin/pip3 /venv/bin/pip3.* /venv/bin/wheel diff --git a/README.md b/README.md index b5e86667..671d4c7e 100644 --- a/README.md +++ b/README.md @@ -80,8 +80,6 @@ docker compose up -d --wait # ini
# Option B: Or use it as a plain Docker container: mkdir -p ~/archivebox/data && cd ~/archivebox/data -docker run --rm -it -v "$PWD:/data" archivebox/archivebox:dev init -docker run --rm -it -v "$PWD:/data" archivebox/archivebox:dev install docker run -d --name archivebox -v "$PWD:/data" -p 8000:8000 archivebox/archivebox:dev # open http://admin.archivebox.localhost:8000 to finish setup # docker run -it -v $PWD:/data archivebox/archivebox:dev add 'https://example.com' @@ -187,17 +185,16 @@ See below for more usage examples using the C
  1. Install Docker on your system (if not already installed).
  2. -
  3. Create a new empty directory and initialize your collection (can be anywhere). +
  4. Create a new empty directory and start the server, which initializes the collection automatically (can be anywhere).
    mkdir -p ~/archivebox/data && cd ~/archivebox/data
    -docker run --rm -v $PWD:/data -it archivebox/archivebox:dev init
    -docker run --rm -v $PWD:/data -it archivebox/archivebox:dev install
    +docker run -d --name archivebox -v $PWD:/data -p 8000:8000 archivebox/archivebox:dev
     
  5. -
  6. Optional: Start the server, then open /admin/ on the hostname or IP used to reach ArchiveBox (local example: http://admin.archivebox.localhost:8000/admin/) to create the first admin. If BASE_URL is not configured yet, continue through the web setup wizard. -
    docker run -v $PWD:/data -p 8000:8000 archivebox/archivebox:dev
    +
  7. Open /admin/ on the hostname or IP used to reach ArchiveBox (local example: http://admin.archivebox.localhost:8000/admin/) to create the first admin. If BASE_URL is not configured yet, continue through the web setup wizard. +
    
     # completely optional, CLI can always be used without running a server
    -# docker run -v $PWD:/data -it archivebox/archivebox:dev [subcommand] [--help]
    -docker run -v $PWD:/data -it archivebox/archivebox:dev help
    +# docker exec archivebox archivebox [subcommand] [--help]
    +docker exec archivebox archivebox help
     
    For more info, see Install: Docker Compose in the Wiki. ➡️
  8. @@ -497,12 +494,10 @@ archivebox help # get list of archivebox subcommands that can be ru
    
     # make sure you have `docker-compose.yml` from the Quickstart instructions first
     
    -# docker compose run --rm archivebox [subcommand] [--help] -docker compose run --rm archivebox init -docker compose run --rm archivebox install -docker compose run --rm archivebox version -docker compose run --rm archivebox help -docker compose run --rm archivebox add 'https://example.com' +# docker compose exec archivebox archivebox [subcommand] [--help] +docker compose exec archivebox archivebox version +docker compose exec archivebox archivebox help +docker compose exec archivebox archivebox add 'https://example.com' # to start webserver: docker compose up
    For more info, see our Usage: Docker Compose CLI wiki. ➡️ @@ -514,15 +509,12 @@ docker compose run --rm archivebox add 'https://example.com' Docker CLI Usage Examples: Docker
    
    -# make sure you create and cd into in a new empty directory first  
    +# make sure the `archivebox` server container from the Quickstart is running first
     
    -# docker run -it -v $PWD:/data archivebox/archivebox:dev [subcommand] [--help] -docker run -v $PWD:/data -it archivebox/archivebox:dev init -docker run -v $PWD:/data -it archivebox/archivebox:dev install -docker run -v $PWD:/data -it archivebox/archivebox:dev version -docker run -v $PWD:/data -it archivebox/archivebox:dev help -docker run -v $PWD:/data -it archivebox/archivebox:dev add 'https://example.com' -# to start webserver: docker run -v $PWD:/data -it -p 8000:8000 archivebox/archivebox:dev +# docker exec archivebox archivebox [subcommand] [--help] +docker exec archivebox archivebox version +docker exec archivebox archivebox help +docker exec archivebox archivebox add 'https://example.com'
    For more info, see our Usage: Docker CLI wiki. ➡️ @@ -682,7 +674,7 @@ It uses all available methods out-of-the-box, but you can disable extractors and Expand to see the full list of ways it saves each page... -data/archive/{Snapshot.id}/
    +data/archive/users/{username}/snapshots/{YYYYMMDD}/{domain}/{Snapshot.id}/
    • Index: index.html & index.json HTML and JSON index files containing metadata and details
    • Title, Favicon, Headers Response headers, site favicon, and parsed site title
    • @@ -849,7 +841,7 @@ The on-disk layout is optimized to be easy to browse by hand and durable long-te ...
    -Each snapshot subfolder includes static metadata and plain extractor output files. ArchiveBox also maintains a backwards-compatible data/archive/TIMESTAMP symlink for each snapshot. +Each snapshot subfolder includes static metadata and plain extractor output files. Current releases do not create top-level data/archive/TIMESTAMP projections; legacy timestamp directories are migrated into the user-scoped tree by archivebox update --migrate-only.

    Learn More