name: Install and CLI Compatibility on: workflow_call: env: DOCKER_IMAGE: archivebox-ci ARCHIVEBOX_IMAGE: archivebox-ci PYTHONIOENCODING: utf-8 PYTHONLEGACYWINDOWSSTDIO: utf-8 USE_COLOR: False UV_NO_SOURCES: "1" jobs: install_cli_platform: name: CLI install / ${{ matrix.os_name }} / Python ${{ matrix.python }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: ubuntu-24.04 os_name: linux python: "3.14" - os: macos-15 os_name: macOS python: "3.13" - os: macos-15 os_name: macOS python: "3.14" steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: submodules: true fetch-depth: 1 ### Set up Python - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: ${{ matrix.python }} - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: version: "0.11.3" enable-cache: true cache-dependency-glob: uv.lock - name: Prepare abxpkg environment env: LIB_DIR: ${{ runner.temp }}/abx-lib ABXPKG_LIB_DIR: ${{ runner.temp }}/abx-lib run: | set -Eeuo pipefail ABXPKG_VERSION="$(uv run --no-project python -c 'import tomllib; print(next(package["version"] for package in tomllib.load(open("uv.lock", "rb"))["package"] if package["name"] == "abxpkg"))')" test -n "$ABXPKG_VERSION" mkdir -p "$LIB_DIR/env/bin" { echo "ABXPKG_VERSION=$ABXPKG_VERSION" echo "LIB_DIR=$LIB_DIR" echo "ABXPKG_LIB_DIR=$ABXPKG_LIB_DIR" } >> "$GITHUB_ENV" echo "$LIB_DIR/env/bin" >> "$GITHUB_PATH" - name: Resolve CI tools through abxpkg env: LIB_DIR: ${{ runner.temp }}/abx-lib ABXPKG_LIB_DIR: ${{ runner.temp }}/abx-lib run: | set -Eeuo pipefail export PATH="$LIB_DIR/env/bin:$PATH" tooling_env="$( uv run --no-project --with "abxpkg==$ABXPKG_VERSION" abxpkg env \ --install \ --json \ --lib="$LIB_DIR" \ --deps-from="$GITHUB_WORKSPACE/.github/configs/ci-tooling.json:ci_binaries" )" JQ_BINARY="$LIB_DIR/env/bin/jq" "$JQ_BINARY" -r 'to_entries[] | "\(.key)=\(.value)"' \ <<< "$tooling_env" >> "$GITHUB_ENV" echo "JQ_BINARY=$JQ_BINARY" >> "$GITHUB_ENV" test -L "$JQ_BINARY" test -x "$JQ_BINARY" - name: Resolve Linux build dependencies through abxpkg if: runner.os == 'Linux' env: LIB_DIR: ${{ runner.temp }}/abx-lib ABXPKG_LIB_DIR: ${{ runner.temp }}/abx-lib run: | set -Eeuo pipefail uv run --no-project --with "abxpkg==$ABXPKG_VERSION" abxpkg env \ --install \ --no-cache \ --json \ --lib="$LIB_DIR" \ --deps-from="$GITHUB_WORKSPACE/.github/configs/ci-linux-build.json:required_binaries" - name: Resolve host Homebrew through abxpkg if: runner.os == 'macOS' env: LIB_DIR: ${{ runner.temp }}/abx-lib ABXPKG_LIB_DIR: ${{ runner.temp }}/abx-lib run: | set -Eeuo pipefail brew_env="$( uv run --no-project --with "abxpkg==$ABXPKG_VERSION" abxpkg env \ --install \ --json \ --lib="$LIB_DIR" \ --deps-from="$GITHUB_WORKSPACE/.github/configs/ci-macos-brew.json:required_binaries" )" brew_binary="$("$JQ_BINARY" -r '.BREW_BINARY' <<< "$brew_env")" test -L "$brew_binary" echo "BREW_BINARY=$brew_binary" >> "$GITHUB_ENV" - name: Resolve macOS build dependencies through abxpkg if: runner.os == 'macOS' env: LIB_DIR: ${{ runner.temp }}/abx-lib ABXPKG_LIB_DIR: ${{ runner.temp }}/abx-lib run: | set -Eeuo pipefail brew_target="$(readlink "$BREW_BINARY")" test -x "$brew_target" brew_root="$(dirname "$(dirname "$brew_target")")" export ABXPKG_BREW_ROOT="$brew_root" uv run --no-project --with "abxpkg==$ABXPKG_VERSION" abxpkg env \ --install \ --json \ --lib="$LIB_DIR" \ --deps-from="$GITHUB_WORKSPACE/.github/configs/ci-macos-build.json:required_binaries" PATH="$brew_root/opt/openldap/bin:$PATH" \ uv run --no-project --with "abxpkg==$ABXPKG_VERSION" abxpkg env \ --install \ --json \ --lib="$LIB_DIR" \ --deps-from="$GITHUB_WORKSPACE/.github/configs/ci-macos-openldap-env.json:required_binaries" \ | "$JQ_BINARY" -r 'to_entries[] | "\(.key)=\(.value)"' \ >> "$GITHUB_ENV" ldapvc_target="$(readlink "$LIB_DIR/env/bin/ldapvc")" while [[ -L "$ldapvc_target" ]]; do next_ldapvc_target="$(readlink "$ldapvc_target")" if [[ "$next_ldapvc_target" == /* ]]; then ldapvc_target="$next_ldapvc_target" else ldapvc_target="$(dirname "$ldapvc_target")/$next_ldapvc_target" fi done test -x "$ldapvc_target" openldap_prefix="$(dirname "$(dirname "$ldapvc_target")")" test -f "$openldap_prefix/include/ldap.h" test -f "$openldap_prefix/lib/libldap.dylib" { echo "ABXPKG_BREW_ROOT=$brew_root" echo "CPPFLAGS=-I$openldap_prefix/include${CPPFLAGS:+ $CPPFLAGS}" echo "LDFLAGS=-L$openldap_prefix/lib${LDFLAGS:+ $LDFLAGS}" echo "PKG_CONFIG_PATH=$openldap_prefix/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" } >> "$GITHUB_ENV" - name: Install dependencies with uv run: uv sync --locked --dev --all-extras - name: ArchiveBox full install check run: | set -Eeuo pipefail DATA_DIR="$PWD/tests/out/data" mkdir -p "$DATA_DIR" uv run --directory "$DATA_DIR" --no-sync --no-sources archivebox init uv run --directory "$DATA_DIR" --no-sync --no-sources archivebox install uv run --directory "$DATA_DIR" --no-sync --no-sources archivebox version uv run --directory "$DATA_DIR" --no-sync --no-sources archivebox status