Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Release Action #160
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Release Action #160
Changes from 23 commits
262ce211a31eae65740cd9542d229b0647c29d924b58bdc5fab776cfedfd72a2c670243dafd0d57edf388c330bba1d0b2cfa6421fd49c6805ccd8cda78736bfcbae62c79df7be67b64ba3e4710e98b143fe51c4d78d862708de9a27716b94File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: LabAutomationAndScreening/copier-nuxt-python-intranet-app
Length of output: 9713
🌐 Web query:
ECR image tag naming rules format requirements AWS💡 Result:
AWS ECR image tags (the part after the colon in repository:tag) follow the standard Docker/OCI image tag specification, as ECR is a Docker-compatible registry. Official AWS documentation does not specify additional restrictions beyond length limits in APIs. Key requirements: - Length: 1 to 300 characters [1][2][3]. - Characters: Valid ASCII, lowercase and uppercase letters (a-zA-Z), digits (0-9), underscores (), periods (.), and dashes (-). [4][5][6][7] - Cannot start with a period (.) or dash (-). [4][5] - Regular expression approximation: [a-zA-Z0-9][a-zA-Z0-9._-]{0,127} but ECR allows up to 300 chars total [4][1]. ECR supports pushing images with tags meeting Docker rules using docker tag and docker push [8][7]. Examples in docs use tags like 'latest', 'v1.0', '2017.03' [9][8]. Note: Repository names have stricter patterns (lowercase only, specific separators) up to 256 chars [10], but tags allow uppercase. AWS resource tags (key-value metadata on repositories) are separate: keys up to 128 chars, values up to 256 chars [11].
Citations:
🏁 Script executed:
Repository: LabAutomationAndScreening/copier-nuxt-python-intranet-app
Length of output: 1148
Fix release tag validation to match ECR requirements.
The regex pattern
^[a-zA-Z0-9._-]+$allows tags starting with.or-, which ECR rejects. Per AWS documentation, ECR tag rules require tags must not start with a period or hyphen, must contain only alphanumeric characters, hyphens, underscores, and dots, and can be 1–300 characters long.Proposed fix
RELEASE_TAG="${{ inputs.release-tag }}" - if ! [[ "$RELEASE_TAG" =~ ^[a-zA-Z0-9._-]+$ ]]; then - echo "Invalid release-tag: '$RELEASE_TAG'. Only alphanumeric characters, hyphens, underscores, and dots are allowed." + if ! [[ "$RELEASE_TAG" =~ ^[a-zA-Z0-9][a-zA-Z0-9._-]{0,299}$ ]]; then + echo "Invalid release-tag: '$RELEASE_TAG'. Must start with alphanumeric, contain only alphanumeric/hyphens/underscores/dots, and be 1-300 characters." exit 1 fi🤖 Prompt for AI Agents
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
Does softprops/action-gh-release v3.0.0 exist and what are the breaking changes from v2.2.1?💡 Result:
Yes, softprops/action-gh-release v3.0.0 exists, released on 2026-04-12.[1][2][3] The primary breaking change from v2.2.1 (and the v2 series) to v3.0.0 is the upgrade of the action runtime from Node 20 to Node 24, requiring GitHub-hosted runners or self-hosted fleets that support Node 24. Users still needing Node 20 compatibility should remain on v2.6.2.[1][2][4][5] No other breaking changes to inputs, outputs, or behavior are mentioned in the v3.0.0 release notes; it primarily updates the runtime, Node types, and tag management.[1][4]
Citations:
Confirm Node 24 compatibility before updating to softprops/action-gh-release v3.0.0
The update from v2.2.1 to v3.0.0 includes a breaking change: the runtime upgrades from Node 20 to Node 24. Ensure your GitHub-hosted runners or self-hosted fleet support Node 24; otherwise, remain on v2.6.2 for Node 20 compatibility.
🤖 Prompt for AI Agents
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial | ⚡ Quick win
Add success logging for workflow visibility.
The script completes silently on success. In CI logs, explicit confirmation messages improve debugging and auditability.
📊 Proposed enhancement
if args.push_tag_to_remote: ensure_tag_not_present(tag, args.remote) _ = subprocess.run(["git", "tag", tag], check=True) # noqa: S603,S607 # this is trusted input, it's our own pyproject.toml file. and if `git` isn't in PATH, then there are larger problems anyway _ = subprocess.run(["git", "push", args.remote, tag], check=True) # noqa: S603,S607 # this is trusted input, it's our own pyproject.toml file. and if `git` isn't in PATH, then there are larger problems anyway + print(f"✓ Tag {tag} created and pushed to {args.remote}") return if args.confirm_tag_not_present: ensure_tag_not_present(tag, args.remote) + print(f"✓ Tag {tag} confirmed not present on {args.remote}")📝 Committable suggestion
🤖 Prompt for AI Agents
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: LabAutomationAndScreening/copier-nuxt-python-intranet-app
Length of output: 149
🌐 Web query:
gh api pagination default behavior GitHub CLI documentation💡 Result:
The default behavior of
gh apiin GitHub CLI does not automatically paginate results. By default, it fetches only the first page of results from the GitHub API [1]. To fetch all pages, use the--paginateflag, which makes additional HTTP requests following thenextlink in response headers for REST APIs or usingendCursorandpageInfofor GraphQL queries until no more pages exist [1][2]. Each page is output as a separate JSON array or object; combine with--slurpto wrap multiple pages into a single JSON array [1]. Without--paginate, users must manually handle pagination using query parameters likepageorper_page[3][4].Citations:
🏁 Script executed:
Repository: LabAutomationAndScreening/copier-nuxt-python-intranet-app
Length of output: 2566
🏁 Script executed:
Repository: LabAutomationAndScreening/copier-nuxt-python-intranet-app
Length of output: 4596
gh apidoes not paginate by default —workflow-summarycan be silently missed.gh apiwithout--paginatereturns only the first page of results (default 30 items, maxper_page=100). The Jobs API (/actions/runs/{id}/jobs) often returns >30 jobs in CI workflows that use OS/Python matrices, andworkflow-summaryis typically the last job (it depends on all others), so it can fall on a later page. When that happens, thejqfilter yields an empty$CONCLUSIONand:Fetch all pages (or at least bump
per_pageto 100) so the lookup is reliable:🔧 Suggested fix
🤖 Prompt for AI Agents
Uh oh!
There was an error while loading. Please reload this page.