Uh oh!
There was an error while loading. Please reload this page.
docs: add portfolio metadata - #14
Conversation
📝 WalkthroughWalkthroughThe change adds documentation for the Minecraft resource-pack parser, project publication metadata, documentation-example validation, and a GitHub Actions workflow that triggers portfolio rebuilds from selected pushes. ChangesParser documentation
Portfolio deployment workflow
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
.github/workflows/portfolio.yml (1)
14-16: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick winDeclare least-privilege permissions for this job.
Because this job only calls the Vercel hook, add
permissions: {}beforejobs:. This prevents future steps from receiving unnecessary repository access. GitHub creates a token for each job and supports reducing its permissions with thepermissionskey. (docs.github.com)Proposed change
concurrency: group: update-portfolio cancel-in-progress: true +permissions: {}+ jobs:🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/portfolio.yml around lines 14 - 16, Set the workflow-level permissions to an empty object before the jobs declaration, ensuring the rebuild job that only invokes the Vercel hook receives no unnecessary repository token permissions.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.dylan/description.md:
- Around line 4-7: The API description overstates that every request returns
parsed metadata and a resolved version range. Update .dylan/description.md lines
4-7 and .dylan/description.nl.md lines 4-7 to document the IdentificationResult
alternatives and distinguish declared versus effective VersionResolution values,
using equivalent conditional wording in both languages.
In @.github/workflows/portfolio.yml:
- Around line 26-27: Update the workflow job containing the curl invocation to
add explicit --connect-timeout and --max-time bounds to the Vercel hook request,
and set a suitable timeout-minutes value on that job so stalled requests cannot
retain the concurrency group for the default limit.
---
Nitpick comments:
In @.github/workflows/portfolio.yml:
- Around line 14-16: Set the workflow-level permissions to an empty object
before the jobs declaration, ensuring the rebuild job that only invokes the
Vercel hook receives no unnecessary repository token permissions.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: d036ffe5-c511-47e0-82c5-e458022cb6e5
📒 Files selected for processing (8)
.dylan/description.md.dylan/description.nl.md.dylan/meta.toml.dylan/star/1-docs-that-cannot-rot.md.dylan/star/1-docs-that-cannot-rot.nl.md.dylan/story.md.dylan/story.nl.md.github/workflows/portfolio.yml
| Give it a directory, a zip, or a bare `pack.mcmeta`; get back parsed metadata plus a | ||
| resolved version range. Every schema `pack.mcmeta` has ever used parses into one | ||
| canonical shape — only the version declaration stays polymorphic, because it is the only | ||
| part whose shape actually changed. |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Describe the API result contract accurately in both language variants.
The API does not always return parsed metadata or a version range. Document the IdentificationResult alternatives and the declared/effective VersionResolution values in both files.
.dylan/description.md#L4-L7: replace the unconditional version-range promise..dylan/description.nl.md#L4-L7: apply the equivalent conditional wording in Dutch.
📍 Affects 2 files
.dylan/description.md#L4-L7(this comment).dylan/description.nl.md#L4-L7
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.dylan/description.md around lines 4 - 7, The API description overstates
that every request returns parsed metadata and a resolved version range. Update
.dylan/description.md lines 4-7 and .dylan/description.nl.md lines 4-7 to
document the IdentificationResult alternatives and distinguish declared versus
effective VersionResolution values, using equivalent conditional wording in both
languages.
| curl -fsS -X POST "$HOOK" > /dev/null | ||
| echo "Portfolio rebuild triggered." |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bashset -eu
printf'%s\n''--- workflow files ---'
git ls-files '.github/workflows/portfolio.yml''.github/workflows'printf'%s\n''--- portfolio workflow ---'
cat -n .github/workflows/portfolio.yml
printf'%s\n''--- related timeout/concurrency/hook settings ---'
rg -n -C 3 'timeout-minutes|concurrency|curl|HOOK|hook|vercel' .github/workflows .github 2>/dev/null ||trueRepository: CodeByDylan/ResourcePackIdentifier
Length of output: 5322
🌐 Web query:
GitHub Actions timeout-minutes job default maximum documentation curl --connect-timeout --max-time default timeout documentation Vercel deploy hook duplicate requests idempotent
💡 Result:
GitHub Actions Job Timeouts The default timeout for a GitHub Actions job is 360 minutes (6 hours) [1][2]. While many GitHub-hosted runners have a hard limit of 6 hours for job execution [2], the timeout-minutes setting allows you to specify a shorter duration [1]. For self-hosted runners, while you can configure longer timeouts, it is important to note that the runner’s own execution limits may still apply depending on your configuration [3][4]. Curl Timeout Behavior By default, most operations in curl have no timeout (they will wait indefinitely) [5][6]. - --connect-timeout: Sets the maximum time, in seconds, that you allow the connection phase (DNS lookup, TCP/TLS/QUIC handshake) to take [5][7][8]. If it is not provided, curl does not have a strict default for this phase, though some historical internal implementations may have varied [9]. - --max-time (-m): Sets the maximum total time, in seconds, allowed for the entire operation [5][6]. If the specified time elapses, curl exits with a timeout error (exit code 28) [5][6]. Vercel Deploy Hooks and Idempotency Vercel Deploy Hooks are idempotent by design [10]. When you send multiple POST requests to the same Deploy Hook in rapid succession, Vercel’s systems intelligently debounce the builds and discard duplicate deployments to prevent unnecessary processing [11][10]. This ensures that even if a trigger is fired multiple times (e.g., due to a retry mechanism), it does not lead to redundant deployment cycles [12][13].
Citations:
- 1: jobs.<job_id>.timeout-minutes description is misleading github/docs#7984
- 2: https://docs.github.com/en/actions/reference/limits
- 3: fix: remove 360 upper limit on timeout-minutes to support custom runners github/gh-aw#25042
- 4: https://stackoverflow.com/questions/70187174/github-actions-self-hosted-runner-the-job-running-has-exceeded-the-maximum-exe
- 5: https://everything.curl.dev/usingcurl/timeouts.html
- 6: https://github.com/curl/everything-curl/blob/master/usingcurl/timeouts.md
- 7: https://man7.org/linux/man-pages/man1/curl.1.html
- 8: https://everything.curl.dev/usingcurl/connections/timeout.html
- 9: https://askubuntu.com/questions/526226/what-is-the-default-timeout-value-for-curl
- 10: https://vercel.com/i/what-is-idempotency
- 11: https://vercel.com/blog/introducing-deploy-hooks
- 12: https://vercel.com/docs/deploy-hooks
- 13: https://vercel.com/docs/deploy-hooks.md
🏁 Script executed:
#!/bin/bashset -eu
python3 - <<'PY'from pathlib import Pathimport repath = Path(".github/workflows/portfolio.yml")text = path.read_text()job = re.search(r"(?ms)^ rebuild:\n(.*?)(?=^ \S|\Z)", text)assert job, "rebuild job not found"job_text = job.group(0)curl = re.search(r"(?m)^\s*curl\b.*$", job_text)assert curl, "curl command not found"print("rebuild job has timeout-minutes:", bool(re.search(r"(?m)^\s+timeout-minutes:", job_text)))print("curl command:", curl.group(0).strip())print("curl has --connect-timeout:", "--connect-timeout" in curl.group(0))print("curl has --max-time:", "--max-time" in curl.group(0))print("workflow concurrency cancel-in-progress:", bool(re.search(r"(?m)^\s+cancel-in-progress:\s*true\s*$", text)))PYRepository: CodeByDylan/ResourcePackIdentifier
Length of output: 370
Bound the Vercel hook request.
Line 26 has no connection or transfer timeout. Add --connect-timeout and --max-time, and set timeout-minutes on the job to prevent a stalled request from occupying the concurrency group for the default six-hour limit.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/portfolio.yml around lines 26 - 27, Update the workflow
job containing the curl invocation to add explicit --connect-timeout and
--max-time bounds to the Vercel hook request, and set a suitable timeout-minutes
value on that job so stalled requests cannot retain the concurrency group for
the default limit.
Uh oh!
There was an error while loading. Please reload this page.
Adds the
.dylan/directory that dylandebeer.nl reads at build time to generate this project's page, plus a workflow that triggers a site rebuild on version tags and.dylan/**changes.No source or build files are touched.
Summary by CodeRabbit
Documentation
Chores