Publishing infrastructure - Three Gitea workflows: ci.yml (PRs, non-main pushes), publish-snapshot.yml (main -> Gitea under dist-tag @main) and release.yml (tags -> Gitea + npmjs) - Tag-driven releases as <package-dir>-v<version>; the manifest stays the source of truth and release.yml refuses to run if tag and manifest disagree - Every publish is idempotent: each step checks the registry first, so a run that fails on the second registry can simply be re-run - Hard coverage gate (85% branches) shared by CI, the pre-push hook and local runs, since the thresholds live in vitest.config.ts rather than a CI flag - README.PUBLISH.md documents the whole mechanism Toolchain - TypeScript 7 native compiler; drop tsgo and ts-node, use tsx for dev runs - Biome 1.9 -> 2.x, Vitest 1 -> 4, zod 3 -> 4, inquirer 8 -> 14, pnpm 11.17.0 - Replace inquirer-checkbox-plus-prompt, which is peer-capped at inquirer <9, with enquirer's AutoComplete; the CubeSelection contract is unchanged - Stand in for zod 4's removed z.AnyZodObject with a local AnyObjectSchema Repo hygiene - Stop tracking dist/; ignore coverage/, *.tsbuildinfo, .npmrc* and release.json - Drop package-lock.json in favour of pnpm-lock.yaml Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2.5 KiB
Testing Nopy with Docker
This guide explains how to set up a local Docker container to test nopy deployments using the provided Ubuntu-24LTS.Dockerfile and example.nopysession.json.
Prerequisites
- Docker installed and running on your machine.
nopyinstalled and linked (see README.md).
1. Setup SSH Key (Important)
The provided Ubuntu-24LTS.Dockerfile contains a hardcoded public SSH key. Before building, you must replace it with your own public key to allow SSH access (if needed) or ensure pyinfra can connect if it uses SSH transport.
- Open
Ubuntu-24LTS.Dockerfile. - Locate the line starting with
echo "ssh-ed25519 .... - Replace the key string with the content of your own public key (usually
~/.ssh/id_ed25519.pubor~/.ssh/id_rsa.pub).
# Example replacement
RUN mkdir -p /home/testuser/.ssh && \
echo "YOUR_PUBLIC_KEY_HERE" >> /home/testuser/.ssh/authorized_keys && \
...
2. Build the Docker Image
Run the following command from the packages/nopy directory:
docker build -f Ubuntu-24LTS.Dockerfile -t nopy-test-ubuntu .
3. Run the Container
Start the container in the background. We explicitly name it nopy-test-container because the example.nopysession.json is configured to target this specific container name.
docker run -d \
--name nopy-test-container \
--privileged \
-p 2222:22 \
nopy-test-ubuntu
--name nopy-test-container: Matches the host defined inexample.nopysession.json.--privileged: Required for some system-level operations (likecriuor service management) if tested.-p 2222:22: Maps the container's SSH port to local port 2222 (optional, allows manual SSH connection).
4. Deploy using Nopy
Now you can run the example session. Nopy uses pyinfra's @docker connector to communicate directly with the container, so SSH keys are not strictly required for the deployment itself, but the session is configured to simulate a realistic environment.
nopy install -l example.nopysession.json
If successful, nopy will execute the apt:essentials cube against the container.
5. Manual Verification
You can connect to the container manually to verify changes:
Via Docker Exec:
docker exec -it nopy-test-container bash
Via SSH (if configured):
ssh -p 2222 testuser@localhost
# Password: password
6. Cleanup
To stop and remove the container:
docker rm -f nopy-test-container