Recued
Menu
← Back to recipes

Verify an inbound artifact

by recued-core v3 45 views

Use “Verify an inbound artifact” in Recued. Run every applicable check against a file on disk — version fingerprint against the sender's published checksum, a detached Minisign signature against a public key you already hold, archive integrity, and a member listing — and record each result separately.

Complete workflow

Use Inbound Artifact Verification in Recued for signature, checksum, minisign, and integrity. It includes 8 built-in actions and 4 ready-to-run workflows. Actions that change data use Recued's approval controls.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Use “Verify an inbound artifact” in Recued. Run every applicable check against a file on disk — version fingerprint against the sender's published checksum, a detached Minisign signature against a public key you already hold, archive integrity, and a member listing — and record each result separately.

pack:inbound-artifact-verificationverificationsignaturechecksum
by recued-core pinned v3

Use “Register an inbound artifact” in Recued. Record a file you have received so it can be verified. Keyed on its path, so re-registering the same file converges on the same row instead of creating a second one.

pack:inbound-artifact-verificationverificationrecordsv2
by recued-core pinned v2

Use “Show artifact verifications” in Recued. List received artifacts with each check's result shown separately. It reads information without changing data in the connected service.

pack:inbound-artifact-verificationverificationboardrecords
by recued-core pinned v3

Use “One artifact” in Recued. Open one artifact from the list that names it, and read everything recorded about that artifact on one page.

pack:inbound-artifact-verificationartifactdetailnavigation
by recued-core pinned v1
View pack details, dependencies, and permissions →

Why the checks are PREFETCH steps

⛔⛔ This is the whole design, and it is not stylistic. Every one of these tools reports failure the same way: a non-zero exit. signature.verify, file.test_gzip and archive.list_tar are all exit_code_handling: zero_is_success with no captured output — so a failed check is a failed step. And a failed sequential step ends the run (errors.push(log.error); break;), which would mean a recipe whose entire job is to record a failure could never record one.

optional: true — the flag that turns a step failure into a null result and lets the run continue — is honoured only in prefetch (prefetch.ts:232; the sequential runner has no equivalent). So the checks run as optional prefetch steps, and the sequential half reads which ones survived.

⚠ Prefetch steps run in PARALLEL and cannot read each other, so every check takes its inputs from {{config.*}} — never from another step. That is why you pass the path, the signature and the key here rather than having the recipe read them off the artifact row.

Reading the result

⚠ A skipped check and a failed check both land as null. They are told apart by whether the check was APPLICABLE, which is computed from your config: Archive kind decides whether the listing and integrity checks apply, and a blank Signature file means no signature check was asked for. A check that was applicable and came back null is a failure; one that was never applicable is reported as not-run. The card shows both counts separately.

⚠ verified requires every applicable check to pass AND at least one to have run. An artifact with no checksum, no signature and no archive kind runs zero checks and is recorded failed with a note — because "nothing was checked" must never read as "nothing was wrong".

⛔ Digests are compared case-insensitively but exactly. Paste the sender's checksum whole; a truncated prefix will not match and is not treated as a partial pass.

⚠ This reads a path on your disk that you name. The ops are read-only — digest, verify, test, list — and none of them extracts, writes or executes anything. Nothing is uploaded.

How it works 56 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Data fetch
▼ digest recued-core.openssl-dgst.file.digest_sha256
Digest sha256 file on openssl dgst
▼ signature recued-core.minisign.signature.verify
Verify signature on minisign
skip: config.signature_path is_empty
▼ listing recued-core.tar.archive.list_tar
List tar archive on tar
skip: config.kind equal file
▼ integrity recued-core.gzip.file.test_gzip
Test gzip file on gzip
skip: config.kind not_equal tar.gz
▼
Process (52 steps)
■ artifact_id trim
Trim whitespace from setting artifact id
■ id_present compare
Check if artifact id has data
⚠ id_guard guard
Stop if id present equals
◆ artifact recued-core.inbound-artifact-verification.artifact.get
Get artifact on inbound artifact verification
■ artifact_found compare
Check if artifact record id has data
⚠ artifact_guard guard
Stop if artifact found equals
■ path_matches compare
Check if artifact record path equals setting path
⚠ path_guard guard
Stop if path matches equals
■ digest_ref default
Apply default
■ digest_produced compare
Check if digest ref has data
◆ digest_persist core.storage.file.persist
Persist storage file
skip: step.digest_produced equal false
■ digest_record_id default
Apply default
◆ digest_read core.storage.data-file-read
Data file read storage
skip: step.digest_record_id is_empty
■ digest_text decode_base64
Apply decode_base64
■ digest_trimmed trim
Trim whitespace from digest text
■ digest_parts split
Split digest trimmed into parts
■ computed_raw default
Apply default
■ computed_sha256 lowercase
Convert computed raw to lowercase
■ expected_trimmed trim
Trim whitespace from setting expected sha256
■ expected_sha256 lowercase
Convert expected trimmed to lowercase
■ digest_applicable compare
Check if expected sha256 has data
■ digest_matches compare
Check if computed sha256 equals expected sha256
■ digest_ok all
Check if all conditions are true
■ signature_applicable all
Check if all conditions are true
■ signature_ran compare
Check if signature exists
■ signature_ok all
Check if all conditions are true
■ integrity_applicable compare
Check if setting kind equals tar.gz
■ integrity_ran compare
Check if integrity exists
■ integrity_ok all
Check if all conditions are true
■ listing_applicable compare
Check if setting kind does not equal file
■ listing_text default
Apply default
■ listing_trimmed trim
Trim whitespace from listing text
■ listing_lines split
Split listing trimmed into parts
■ listing_line_count count
Count items in listing lines
■ member_count ternary
Apply ternary
■ listing_ok all
Check if all conditions are true
■ n_digest ternary
Apply ternary
■ n_signature ternary
Apply ternary
■ n_integrity ternary
Apply ternary
■ n_listing ternary
Apply ternary
■ checks_run math
Calculate: {{step.n_digest}} + {{step.n_signature}} + {{step.n_integrity}} + {{step.n_listing}}
■ any_check_ran compare
Check if checks run is greater than 0
■ digest_verdict ternary
Apply ternary
■ signature_verdict ternary
Apply ternary
■ integrity_verdict ternary
Apply ternary
■ listing_verdict ternary
Apply ternary
■ all_passed all
Check if all conditions are true
■ status ternary
Apply ternary
■ no_checks_note ternary
Apply ternary
■ verified_at date_add
Add 0 seconds to
◆ artifact_update recued-core.inbound-artifact-verification.artifact.update
Update artifact on inbound artifact verification
■ card to_summary
Format results as a summary card
▼
Output
summary card
Settings 6 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

kind setting = file
path setting =
public key setting =
artifact id setting = [object Object]
signature path setting =
expected sha256 setting =

Uses (8 operations)

Pack operation Digest sha256 file on openssl dgst recued-core.openssl-dgst.file.digest_sha256
Pack operation Verify signature on minisign recued-core.minisign.signature.verify
Pack operation List tar archive on tar recued-core.tar.archive.list_tar
Pack operation Test gzip file on gzip recued-core.gzip.file.test_gzip
Pack operation Get artifact on inbound artifact verification recued-core.inbound-artifact-verification.artifact.get
Files Persist storage file core.storage.file.persist
Files Data file read storage core.storage.data-file-read
Pack operation Update artifact on inbound artifact verification recued-core.inbound-artifact-verification.artifact.update

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

What it's allowed to do

Write Pack Inbound Artifact Verification external change
Read: artifact.get · No approvalWrite: artifact.update · No approval
Write Files core.storage.file.persist external change
Read Files core.storage.data-file-read read-only

4 more aren't listed here. You'll see them at install.

Data it touches

SurfacesFiles

About

Tags

pack:inbound-artifact-verificationverificationsignaturechecksumminisignrecordsv2

Details

56 steps 6 configurable settings recipe_id: verify-inbound-artifact