Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,7 @@ examples/arabic-invoice/fonts/*.ttf binary
examples/arabic-invoice/fonts/OFL.txt -text -whitespace
docs/assets/arabic-invoice/** -text
docs/assets/arabic-invoice/*.pdf binary
examples/node/** text eol=lf
examples/node-queue/** text eol=lf
docs/assets/node-queue/** -text
docs/assets/node-queue/*.pdf binary
24 changes: 24 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,22 @@ jobs:
output/reference-env/bin/python -I tools/verify_quickstarts.py
- name: Verify the downloadable Node invoice and guide
run: python tools/verify_node_examples.py
- name: Verify the Node queue download and guide
run: |
python -m pip install pypdf==6.19.0 pypdfium2==5.14.0
python tools/build_node_queue.py
git diff --exit-code -- docs/assets/node-queue/project.zip docs/assets/node-queue/source.json
python tools/verify_node_queue.py
- uses: actions/upload-artifact@v4
if: always()
with:
name: node-queue-verification
path: |
output/node-queue-verification/*.json
output/node-queue-verification/*.txt
output/node-queue-verification/**/*.pdf
output/node-queue-verification/**/*.png
retention-days: 14
- name: Verify the downloadable Python web starter and actual HTTP servers
run: python tools/verify_python_web_starter.py --docker
- uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -333,6 +349,14 @@ jobs:
retention-days: 14
- name: Build the downloadable browser starter and test its static demo
run: |
sudo python3 - <<'PY'
from pathlib import Path
path = Path('/etc/apt/apt-mirrors.txt')
if path.is_file():
lines = path.read_text().splitlines()
if any(line.startswith('https://archive.ubuntu.com/ubuntu') for line in lines):
path.write_text('\n'.join(line for line in lines if 'azure.archive.ubuntu.com' not in line) + '\n')
PY
python -m pip install -r tools/browser-requirements.txt
python -m playwright install --with-deps chrome
python tools/build_browser_starter.py
Expand Down
Binary file added docs/assets/node-queue/NS-1042.pdf
Binary file not shown.
Binary file added docs/assets/node-queue/NS-1042.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/node-queue/NS-1043.pdf
Binary file not shown.
Binary file added docs/assets/node-queue/NS-1044.pdf
Binary file not shown.
Binary file added docs/assets/node-queue/NS-1045.pdf
Binary file not shown.
Binary file added docs/assets/node-queue/NS-1046.pdf
Binary file not shown.
Binary file added docs/assets/node-queue/NS-1047.pdf
Binary file not shown.
Binary file added docs/assets/node-queue/project.zip
Binary file not shown.
59 changes: 59 additions & 0 deletions docs/assets/node-queue/source.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{
"package_version": "0.4.0",
"engine_version": "2.5.11",
"source_commit": "807e4d4cd124980bcc9344a316c47ae3928160b5",
"package_url": "https://registry.npmjs.org/fullbleed/-/fullbleed-0.4.0.tgz",
"package_integrity": "sha512-dvgpKB8dOtf1Nb7TAQF1EKhC3A34qYcJeM5i86XFww93k7Krm0LIsa4u/UntK1lrCZ+bWj/NveenTNhrejpomQ==",
"package_sha256": "fa653f7cc1396cfaf1710656dac7fa37269453263e6b29878a5a3385531d6eb4",
"rendered": {
"NS-1042.pdf": "3078d155f30536f5ad721f7be3c241cd78661ae41249131fc0fd65f37f23e408",
"NS-1042.png": "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7",
"NS-1043.pdf": "4adda7f7e56df435c40d9a1c1fc3546e2493289d8874ec26a7a16e4ed19b8f44",
"NS-1044.pdf": "3d9de4b2366ad977a8bb527cfd20e8d9e62382cd73fb49b651da3a2627d5c56d",
"NS-1045.pdf": "a48c1120789cb9b593700786103a7494a96d84cffd9196a2cd0dd0fac3208063",
"NS-1046.pdf": "eeabaf8070ef7fdc3d87728bedab9b8e5881a9994a7c5784a3bf9ba844ba9a3b",
"NS-1047.pdf": "334dfd5d0213f8a34b9b02eb6b95d11817f6395e99ebbfa0e8224dde06e86dce"
},
"fictional_data": true,
"license": "MIT",
"verification_scope": "Six fictional invoices, queue worker limits, guide snippet, and exact replay using the public npm package.",
"files": [
{
"path": "LICENSE",
"bytes": 1079,
"sha256": "36a2115938f6e68cf0d87eccff7a6a3e57c17017e909cbd640d51aff1fa0c5a9"
},
{
"path": "README.md",
"bytes": 1388,
"sha256": "4950a3cf3be6cd930fd5fa18c24c48fee570b7ee13c93255aa584f240e1df4e1"
},
{
"path": "invoice.html",
"bytes": 2933,
"sha256": "195725eeeb32c521e19b47dbacbb55048bebb6df8566ab135cdc41fbf33fe57a"
},
{
"path": "invoice.css",
"bytes": 3546,
"sha256": "cda22b39ab1f7a1eeac7cd76d162b05cd3568c2430c099123ba30a2fbd58a296"
},
{
"path": "render.mjs",
"bytes": 1484,
"sha256": "5a0e9da94bc247b4c2413c251c8386a3f6416b0119c9950a592c93e4aedb2716"
},
{
"path": "package.json",
"bytes": 229,
"sha256": "194b6b4ac71867f8d56bc4cdee0a2949077f3d90dd6b0e7ebd9417f47fbce2a1"
},
{
"path": "package-lock.json",
"bytes": 1177,
"sha256": "48b40e800811b0a71be395cf976a384296efaf2d395b0e5411ba446f34a1cc3f"
}
],
"zip_bytes": 6137,
"zip_sha256": "4e96bab39784c58eacefb4e4b368862a948eda5f6b4af90b2b78d248925141e9"
}
260 changes: 260 additions & 0 deletions docs/assets/node-queue/verification.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,260 @@
{
"schema": "fullbleed.node-queue-example-verification.v1",
"ok": true,
"package_version": "0.4.0",
"engine_version": "2.5.11",
"workers": {
"created": 6,
"peak": 2,
"remaining": 0,
"node": "v22.23.3",
"platform": "win32"
},
"readers": [
"pypdf",
"PDFium"
],
"commands": [
{
"name": "install",
"exit_code": 0
},
{
"name": "batch",
"exit_code": 0
},
{
"name": "replay",
"exit_code": 0
},
{
"name": "guide-snippet",
"exit_code": 0
}
],
"project_zip_sha256": "4e96bab39784c58eacefb4e4b368862a948eda5f6b4af90b2b78d248925141e9",
"outputs": {
"NS-1042.pdf": "3078d155f30536f5ad721f7be3c241cd78661ae41249131fc0fd65f37f23e408",
"NS-1042.png": "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7",
"NS-1043.pdf": "4adda7f7e56df435c40d9a1c1fc3546e2493289d8874ec26a7a16e4ed19b8f44",
"NS-1044.pdf": "3d9de4b2366ad977a8bb527cfd20e8d9e62382cd73fb49b651da3a2627d5c56d",
"NS-1045.pdf": "a48c1120789cb9b593700786103a7494a96d84cffd9196a2cd0dd0fac3208063",
"NS-1046.pdf": "eeabaf8070ef7fdc3d87728bedab9b8e5881a9994a7c5784a3bf9ba844ba9a3b",
"NS-1047.pdf": "334dfd5d0213f8a34b9b02eb6b95d11817f6395e99ebbfa0e8224dde06e86dce"
},
"checks": [
{
"name": "download ZIP matches the source manifest",
"passed": true
},
{
"name": "ZIP contains exactly the reviewed files",
"passed": true
},
{
"name": "source and ZIP bytes: LICENSE",
"passed": true
},
{
"name": "source and ZIP bytes: README.md",
"passed": true
},
{
"name": "source and ZIP bytes: invoice.html",
"passed": true
},
{
"name": "source and ZIP bytes: invoice.css",
"passed": true
},
{
"name": "source and ZIP bytes: render.mjs",
"passed": true
},
{
"name": "source and ZIP bytes: package.json",
"passed": true
},
{
"name": "source and ZIP bytes: package-lock.json",
"passed": true
},
{
"name": "install command succeeds",
"passed": true
},
{
"name": "installed version and engine match the guide",
"passed": true
},
{
"name": "lockfile integrity matches the verified release",
"passed": true
},
{
"name": "batch command succeeds",
"passed": true
},
{
"name": "six distinct invoices rendered without missing glyphs",
"passed": true
},
{
"name": "actual worker concurrency stays at two and all workers exit",
"passed": true
},
{
"name": "NS-1042.pdf: one PDF page",
"passed": true
},
{
"name": "NS-1042.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "NS-1042.pdf: expected fields in PDFium",
"passed": true
},
{
"name": "NS-1043.pdf: one PDF page",
"passed": true
},
{
"name": "NS-1043.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "NS-1043.pdf: expected fields in PDFium",
"passed": true
},
{
"name": "NS-1044.pdf: one PDF page",
"passed": true
},
{
"name": "NS-1044.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "NS-1044.pdf: expected fields in PDFium",
"passed": true
},
{
"name": "NS-1045.pdf: one PDF page",
"passed": true
},
{
"name": "NS-1045.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "NS-1045.pdf: expected fields in PDFium",
"passed": true
},
{
"name": "NS-1046.pdf: one PDF page",
"passed": true
},
{
"name": "NS-1046.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "NS-1046.pdf: expected fields in PDFium",
"passed": true
},
{
"name": "NS-1047.pdf: one PDF page",
"passed": true
},
{
"name": "NS-1047.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "NS-1047.pdf: expected fields in PDFium",
"passed": true
},
{
"name": "NS-1042.pdf: matches reviewed output",
"passed": true
},
{
"name": "NS-1042.png: matches reviewed output",
"passed": true
},
{
"name": "NS-1043.pdf: matches reviewed output",
"passed": true
},
{
"name": "NS-1044.pdf: matches reviewed output",
"passed": true
},
{
"name": "NS-1045.pdf: matches reviewed output",
"passed": true
},
{
"name": "NS-1046.pdf: matches reviewed output",
"passed": true
},
{
"name": "NS-1047.pdf: matches reviewed output",
"passed": true
},
{
"name": "replay command succeeds",
"passed": true
},
{
"name": "exact-input replay preserves every PDF and PNG",
"passed": true
},
{
"name": "guide contains one executable JavaScript example",
"passed": true
},
{
"name": "guide-snippet command succeeds",
"passed": true
},
{
"name": "invoice-1042.pdf: one PDF page",
"passed": true
},
{
"name": "invoice-1042.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "invoice-1042.pdf: expected fields in PDFium",
"passed": true
},
{
"name": "invoice-1043.pdf: one PDF page",
"passed": true
},
{
"name": "invoice-1043.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "invoice-1043.pdf: expected fields in PDFium",
"passed": true
},
{
"name": "invoice-1044.pdf: one PDF page",
"passed": true
},
{
"name": "invoice-1044.pdf: expected fields in pypdf",
"passed": true
},
{
"name": "invoice-1044.pdf: expected fields in PDFium",
"passed": true
}
],
"scope": "This downloaded batch, guide snippet, and exact replay; no throughput or memory-capacity claim."
}
Loading
Loading