-
Notifications
You must be signed in to change notification settings - Fork 14
✨ Adding composable actions, as well as a new nightly job #149
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
✨ Adding composable actions, as well as a new nightly job #149
Conversation
WalkthroughAdds a new nightly GitHub Actions workflow orchestrating Java analyzer image builds and multi-version e2e API integration tests, plus a reusable composite action to build and export container images with Podman. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Cron as Trigger (cron / manual)
participant Bundle as build-java-analyzer-bundle
participant BuildAction as build-image Action
participant Storage as Artifact Storage
participant E2E as e2e-api-integration-tests
Note over Bundle,BuildAction `#D6EAF8`: Job matrix per repo
Cron->>Bundle: start matrix runs
Bundle->>BuildAction: checkout + build params
BuildAction->>BuildAction: podman build (optional base image)
BuildAction->>Storage: upload image TAR artifact
BuildAction-->>Bundle: outputs (image metadata, artifact name)
Bundle->>Storage: expose artifact for downstream
Bundle-->>E2E: job completion / dependency
E2E->>Storage: download image artifact(s)
E2E->>E2E: load image(s) into container runtime
E2E->>E2E: start Minikube (per operator_tag)
E2E->>E2E: install operator versions & run Go tests
E2E->>Storage: upload test results & analysis artifacts
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Actionable comments posted: 11
🧹 Nitpick comments (2)
.github/workflows/new-nightly.yaml (2)
103-181: Refactor duplicate minikube and install-tackle steps using matrix strategy.Lines 103–181 contain a TODO about code duplication. The three "start minikube" steps (109–125) and three "install konveyor" steps (149–180) have near-identical structure, differing only by operator version.
Consider refactoring using a job matrix or breaking these into a reusable composite action to reduce duplication and improve maintainability:
e2e-api-integration-tests: runs-on: ubuntu-latest strategy: matrix: operator_version: [v0.7, v0.8, latest] steps: - name: start minikube uses: konveyor/tackle2-operator/.github/actions/start-minikube@${{ matrix.operator_version == 'latest' && 'main' || format('release-{0}', matrix.operator_version) }} with: memory: 'max' cpus: 'max' # Similar refactoring for install-tackle stepsThis approach eliminates conditional step duplication.
Do you want me to provide a detailed refactoring example using matrix strategy?
25-25: Remove trailing whitespace from default value.- default: main + default: main
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
.github/workflows/build-image.yaml(1 hunks).github/workflows/new-nightly.yaml(1 hunks)
🧰 Additional context used
🪛 actionlint (1.7.8)
.github/workflows/build-image.yaml
73-73: input "image_tag" of workflow_call event has the default value "latest", but it is also required. if an input is marked as required, its default value will never be used
(events)
79-79: input "dockerfile_path" of workflow_call event has the default value "Dockerfile", but it is also required. if an input is marked as required, its default value will never be used
(events)
85-85: input "build_context" of workflow_call event has the default value ".", but it is also required. if an input is marked as required, its default value will never be used
(events)
.github/workflows/new-nightly.yaml
28-28: "steps" section is missing in job "build-java-analyzer-bundle"
(syntax-check)
44-44: "runs-on" section is missing in job "strategy"
(syntax-check)
45-45: unexpected key "matrix" for "job" section. expected one of "concurrency", "container", "continue-on-error", "defaults", "env", "environment", "if", "name", "needs", "outputs", "permissions", "runs-on", "secrets", "services", "steps", "strategy", "timeout-minutes", "uses", "with"
(syntax-check)
53-53: property "config" is not defined in object type {}
(expression)
67-67: unexpected key "needs" for "step" section. expected one of "continue-on-error", "env", "id", "if", "name", "run", "shell", "timeout-minutes", "uses", "with", "working-directory"
(syntax-check)
70-70: property "java_bundle_build" is not defined in object type {build_image: {conclusion: string; outcome: string; outputs: {string => string}}; checkout: {conclusion: string; outcome: string; outputs: {commit: string; ref: string}}}
(expression)
75-75: string should not be empty
(syntax-check)
87-87: property "api_tests_ref" is not defined in object type {branch: string}
(expression)
105-105: property "component_name" is not defined in object type {branch: string}
(expression)
106-106: the runner of "docker/setup-buildx-action@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue
(action)
110-110: property "operator_tag" is not defined in object type {branch: string}
(expression)
116-116: property "operator_tag" is not defined in object type {branch: string}
(expression)
122-122: property "operator_tag" is not defined in object type {branch: string}
(expression)
128-128: property "component_name" is not defined in object type {branch: string}
(expression)
132-132: property "component_name" is not defined in object type {branch: string}
(expression)
136-136: property "component_name" is not defined in object type {branch: string}
(expression)
150-150: property "operator_tag" is not defined in object type {branch: string}
(expression)
152-152: property "operator_tag" is not defined in object type {branch: string}
(expression)
153-153: property "tag" is not defined in object type {branch: string}
(expression)
154-154: property "tag" is not defined in object type {branch: string}
(expression)
155-155: property "tag" is not defined in object type {branch: string}
(expression)
161-161: property "operator_tag" is not defined in object type {branch: string}
(expression)
163-163: property "operator_tag" is not defined in object type {branch: string}
(expression)
164-164: property "tag" is not defined in object type {branch: string}
(expression)
165-165: property "tag" is not defined in object type {branch: string}
(expression)
166-166: property "tag" is not defined in object type {branch: string}
(expression)
172-172: property "operator_tag" is not defined in object type {branch: string}
(expression)
174-174: property "operator_tag" is not defined in object type {branch: string}
(expression)
175-175: property "tag" is not defined in object type {branch: string}
(expression)
176-176: property "tag" is not defined in object type {branch: string}
(expression)
177-177: property "tag" is not defined in object type {branch: string}
(expression)
183-183: the runner of "actions/setup-go@v4" action is too old to run on GitHub Actions. update the action's version to fix this issue
(action)
193-193: property "api_hub_tests_ref" is not defined in object type {branch: string}
(expression)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Verify api and ui tests run via
global-ci-bundle.ymlwith default input / e2e-api-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci-bundle.ymlwith default input / e2e-ui-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci.ymlwith default inputs / e2e-ui-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci.ymlwith default inputs / e2e-api-integration-tests
🔇 Additional comments (2)
.github/workflows/build-image.yaml (1)
160-165: Incomplete line 165—verify intent.Line 165 appears to be cut off or incomplete in the provided code. Verify that the summary step is complete:
echo "- **Artifact Name**: ${{ steps.build_image.outputs.image_name }}-${{ steps.build_image.outputs.image_tag }}" >> $GITHUB_STEP_SUMMARYDoes this line need additional content, or should it be as shown?
.github/workflows/new-nightly.yaml (1)
51-51: Updateactions/checkoutto v4.The standard for newer workflows is v4.
- uses: actions/checkout@v5 + uses: actions/checkout@v4Likely an incorrect or invalid review comment.
.github/workflows/build-image.yaml
Outdated
| image_tag: | ||
| description: | | ||
| The tag for the image (e.g., "latest", "v1.0.0") | ||
| required: true | ||
| type: string | ||
| default: "latest" |
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
Remove conflicting required and default constraints on image_tag.
When required is true, the default will never be used. For image_call inputs, set either required: false (to keep the default) or remove the default value (to enforce required).
image_tag:
description: |
The tag for the image (e.g., "latest", "v1.0.0")
- required: true
+ required: false
type: string
default: "latest"Alternatively, if you want to enforce a required input, remove the default:
image_tag:
description: |
The tag for the image (e.g., "latest", "v1.0.0")
required: true
type: string
- default: "latest"
---
🏁 Script executed:
```shell
#!/bin/bash
# Inspect the workflow file to verify the structure and all input definitions
fd -t f "build-image.yaml" --exec cat {}
Length of output: 0
🌐 Web query:
GitHub Actions required input default value behavior conflict
💡 Result:
Short answer: GitHub's metadata treats a default value as "provided" so the input is never absent — and GitHub does not automatically enforce required at runtime. That means if you set both default and required: true, the default is used and no platform error is raised. To enforce "must be explicitly set" you must check in your action code (e.g., via @actions/core getInput or custom logic) and fail if the value equals the default or is empty. [1][2]
Sources
- GitHub Actions metadata docs: inputs default/required behaviour and note that required inputs are not automatically enforced. [1]
- @actions/core docs: how action code reads inputs and can require/enforce inputs at runtime. [2]
References
[1] GitHub Docs — Metadata syntax for GitHub Actions.
[2] @actions/core (npm) — getInput / required option.
🏁 Script executed:
#!/bin/bash
# Search for any yaml files in .github directory
find .github -type f -name "*.yaml" -o -name "*.yml" 2>/dev/null | head -20Length of output: 337
🏁 Script executed:
#!/bin/bash
# Inspect build-image.yaml with line numbers, focusing on inputs section
cat -n .github/workflows/build-image.yaml | head -90Length of output: 3124
Address all 6 instances of conflicting required and default constraints, not just image_tag in workflow_call.
The same conflict exists for three inputs (image_tag, dockerfile_path, build_context) in both workflow_dispatch (lines 27–44) and workflow_call (lines 68–85) sections. Choose one approach consistently across both sections:
- Set
required: falseand keep the default value, OR - Set
required: trueand remove the default value
GitHub allows this combination but treats the default as "provided," making required: true ineffective at runtime and creating confusion about intent.
🧰 Tools
🪛 actionlint (1.7.8)
73-73: input "image_tag" of workflow_call event has the default value "latest", but it is also required. if an input is marked as required, its default value will never be used
(events)
🤖 Prompt for AI Agents
In .github/workflows/build-image.yaml around lines 27–44 and 68–85 (inputs
image_tag, dockerfile_path, build_context in both workflow_dispatch and
workflow_call), the inputs currently have conflicting required:true with a
default value; make the intent explicit by setting required: false for all six
instances and keep their current default values so defaults are used when
callers omit them and required no longer contradicts the defaults.
.github/workflows/build-image.yaml
Outdated
| build_context: | ||
| description: | | ||
| Build context directory | ||
| required: true | ||
| type: string | ||
| default: "." |
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
Remove conflicting required and default constraints on build_context.
Apply the same fix to build_context:
build_context:
description: |
Build context directory
- required: true
+ required: false
type: string
default: "."I'll verify this review comment by checking GitHub Actions documentation and examining the actual workflow file.
Now let me examine the actual workflow file to understand the context better:
Let me search for the file in the repository:
Now let me find and examine the actual build-image.yaml file:
---
🏁 Script executed:
```shell
#!/bin/bash
# Find and examine the build-image.yaml file
find . -name "build-image.yaml" -type f 2>/dev/null | head -5
Length of output: 36
🏁 Script executed:
#!/bin/bash
# Search for build-image.yaml file
find . -name "*build*image*.yaml" -o -name "*build*image*.yml" 2>/dev/null | head -10Length of output: 36
🏁 Script executed:
#!/bin/bash
# Examine the build-image.yaml file content, focusing on the inputs section
cat ./.github/workflows/build-image.yaml | head -100Length of output: 2733
🏁 Script executed:
#!/bin/bash
# Get line count and examine lines around 80-85
wc -l ./.github/workflows/build-image.yaml
echo "---"
sed -n '70,95p' ./.github/workflows/build-image.yamlLength of output: 642
---
🌐 Web query:
```web
GitHub Actions workflow_dispatch required true with default value semantics
💡 Result:
Short answer
- In workflow_dispatch inputs, required: true simply marks that the input must be supplied when manually running the workflow from the UI or API — it does not negate or remove a default. If you give a default value, that default will be used when the workflow is started without an explicit input (including non-manual triggers), and the UI shows the default as the pre-filled value. [1][2]
Key sources
- Official docs: workflow_dispatch inputs support description, required, default and type; the triggered workflow receives values via inputs and github.event.inputs. The docs describe required as “a boolean specifying whether the input must be supplied.” Example shows required: true together with a default. [1][2]
- Community discussion: users have observed that defaults are applied on non-manual triggers (and that defining required + default can be a source of confusion). [3]
Practical implications / recommendations
- If you want a value always available (including scheduled/push runs) use a default. required: true will not stop the default being used for non-manual triggers. [1][3]
- If you want to force a human to change the value when manually running, don’t provide a useful default (use an empty string or sentinel like "REQUIRED" and treat that as invalid in workflow steps), or validate in the workflow (fail or prompt) because GitHub’s UI will still accept a default. [1]
- If you want different behavior for manual vs other triggers, detect the event (github.event_name or github.event) and apply different defaults in the workflow (e.g., set job envs/outputs based on github.event.inputs when present, otherwise fall back to repo-level defaults). [2][3]
References
[1] GitHub Docs — Triggering a workflow / on.workflow_dispatch.inputs (examples and field meanings).
[2] GitHub Docs — Workflow syntax reference: on.workflow_dispatch.inputs (use, types, required/default example).
[3] GitHub Community discussion “Inputs take default values on non-manual trigger” (example and community notes about semantics).
Would you like a short example workflow and a pattern to enforce “must-change-on-manual-run” behavior?
Apply the same fix to all three affected inputs: build_context, image_tag, and dockerfile_path.
The semantic issue you identified is real: inputs with sensible defaults should have required: false, not required: true. However, the same pattern exists for image_tag and dockerfile_path, which also have defaults and required: true. These should all be changed consistently:
- Line 70-72:
image_tag(workflow_call) — change torequired: false - Line 75-77:
dockerfile_path(workflow_call) — change torequired: false - Line 82-85:
build_context(workflow_call) — change torequired: false
The same inputs appear in the workflow_dispatch section with identical conflicts and should also be fixed there for consistency.
🧰 Tools
🪛 actionlint (1.7.8)
85-85: input "build_context" of workflow_call event has the default value ".", but it is also required. if an input is marked as required, its default value will never be used
(events)
🤖 Prompt for AI Agents
In .github/workflows/build-image.yaml around lines 70-77 and 80-85
(workflow_call) and the matching workflow_dispatch section, inputs image_tag,
dockerfile_path, and build_context have defaults but are incorrectly marked
required: true; change required: true to required: false for each of these three
inputs in both the workflow_call and workflow_dispatch sections so defaults are
allowed and the inputs are truly optional.
| workflow_call: | ||
| inputs: | ||
| branch: | ||
| description: | | ||
| The branch that should be used to pull all konveyor related repos. | ||
| For example, if you wanted to set a nightly build for release-0.8, you would specify | ||
| "release-0.8". | ||
| required: false | ||
| type: string | ||
| default: main | ||
| workflow_dispatch: | ||
| inputs: | ||
| branch: | ||
| description: | | ||
| The branch that should be used to pull all konveyor related repos. | ||
| For example, if you wanted to set a nightly build for release-0.8, you would specify | ||
| "release-0.8". | ||
| required: false | ||
| type: string | ||
| default: main |
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
Add missing input definitions for e2e-api-integration-tests job.
The e2e job references many undefined inputs (lines 87, 105, 110, 116, 122, 132, 152–155, 195, 197), but only branch is defined in the workflow inputs. Add the missing input definitions:
workflow_call:
inputs:
branch:
description: |
The branch that should be used to pull all konveyor related repos.
For example, if you wanted to set a nightly build for release-0.8, you would specify
"release-0.8".
required: false
type: string
default: main
+ api_tests_ref:
+ description: Reference for API tests repo
+ required: false
+ type: string
+ default: main
+ component_name:
+ description: Name of the component to test
+ required: false
+ type: string
+ operator_tag:
+ description: Operator version tag (e.g., v0.7, v0.8, latest)
+ required: false
+ type: string
+ default: latest
+ tag:
+ description: Image tag for Konveyor components
+ required: false
+ type: string
+ api_hub_tests_ref:
+ description: Reference for API hub tests
+ required: false
+ type: string
+ default: main
+ api_tests_tiers:
+ description: Test tiers to run
+ required: false
+ type: string
---
🏁 Script executed:
```shell
#!/bin/bash
# Examine the workflow file to verify the review comment claims
cat .github/workflows/new-nightly.yaml | head -n 220
Length of output: 8271
Inputs are correctly identified as undefined; review comment is accurate.
The workflow file confirms the review comment's analysis. The workflow_call only defines the branch input, but the e2e-api-integration-tests job references six additional inputs (api_tests_ref, component_name, operator_tag, tag, api_hub_tests_ref, api_tests_tiers) that are not declared. These will cause runtime failures when the workflow is invoked via workflow_call without these input definitions. The suggested input additions are appropriate and necessary.
🤖 Prompt for AI Agents
.github/workflows/new-nightly.yaml lines 6-25: the workflow_call only declares a
single input `branch` but downstream jobs reference six additional inputs
(`api_tests_ref`, `component_name`, `operator_tag`, `tag`, `api_hub_tests_ref`,
`api_tests_tiers`) causing runtime failures; add declarations for each missing
input under workflow_call.inputs (and mirror under workflow_dispatch.inputs if
manual triggers should accept them) with appropriate descriptions, types (string
or array as needed), required: false, and sensible defaults so the called
workflow receives all referenced parameters.
| build-java-analyzer-bundle: | ||
| runs-on: ubuntu-latest | ||
| ## This should be a matrix that inlcudes static-report | ||
| # rulesets which should trigger the hub and it's components BESIDES the addon-analyzer. | ||
| # Java analyzer bundle triggers konveyor/analzyer-lsp (which includes all external providers in that repo). | ||
| # Analyzer-LSP then needs to trigger kai, kantra, tackle-addon-analyzer. | ||
| # Next we need to build the operator/operator-bundle using all the images. | ||
| # Next we need to define the end-to-end tests to run and run a matrix for | ||
| # 1. tackle2-hub/operator | ||
| # 2. kantra -> Needs to run on mac/windows/linux | ||
| # 3. kai -> Needs to run on mac/windows/linux | ||
| # Each of these, needs to have a test for all the external providers built here | ||
| # 1. java-external-provider | ||
| # 2. javascript provider (needs rename) | ||
| # 3. python provider | ||
| # 4. golang provider | ||
| strategy: | ||
| matrix: | ||
| config: [{"repo": "kovneyor/ruleset", "image_name": "", "dependent_repos": []}, {"repo": "konveyor/java-analyzer-bundle", "dependent_repos": []}, {"repo": "konveyor/static-report", "dependent_repos": []}] | ||
|
|
||
| steps: |
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
Critical YAML syntax error: incorrect job structure in build-java-analyzer-bundle.
The job's indentation is malformed. The strategy key should be nested inside the job, not at the same level as runs-on. Additionally, steps should be inside the job, not at the top level.
The current structure violates GitHub Actions YAML format. Here's the correct structure:
build-java-analyzer-bundle:
runs-on: ubuntu-latest
strategy:
matrix:
- config: [...]
- steps:
+ config: [...]
+ steps:
- name: Checkout repo
...Verify the intended matrix configuration and steps, then fix the indentation.
---
🏁 Script executed:
```shell
#!/bin/bash
# Fetch the workflow file to examine structure
find . -name "new-nightly.yaml" -type f | head -1 | xargs cat
Length of output: 8271
---
🌐 Web query:
```web
GitHub Actions checkout@v5 latest version available
💡 Result:
The latest released v5 tag is v5.0.0 (released on Aug 11). [1][2]
Sources:
[1] actions/checkout repository (README/tags).
[2] actions/checkout releases (v5.0.0).
Fix critical YAML syntax errors and step reference issues in build-java-analyzer-bundle job.
The job has multiple critical issues:
-
Incorrect indentation:
strategy(line 44) andsteps(line 48) are at the wrong nesting level. They should be nested inside the job, not siblings to it. -
Typo in config: Line 46 has
"kovneyor/ruleset"instead of"konveyor/ruleset". -
Wrong step references: Line 56 uses
needs: java_bundle_build, but the step is namedbuild_image(line 35). Line 57 referencessteps.java_bundle_build.outputs.date, which is also incorrect. -
Typo in step ID: Line 60 has
id: dependnect-jobs(should bedependent-jobs). -
Incomplete step definition: The "Define dependent jobs" step (line 60) lacks actual commands after
run: |.
Fix the indentation to nest both strategy and steps inside the job, correct all typos and step references, and complete the final step definition.
🧰 Tools
🪛 actionlint (1.7.8)
28-28: "steps" section is missing in job "build-java-analyzer-bundle"
(syntax-check)
44-44: "runs-on" section is missing in job "strategy"
(syntax-check)
45-45: unexpected key "matrix" for "job" section. expected one of "concurrency", "container", "continue-on-error", "defaults", "env", "environment", "if", "name", "needs", "outputs", "permissions", "runs-on", "secrets", "services", "steps", "strategy", "timeout-minutes", "uses", "with"
(syntax-check)
🤖 Prompt for AI Agents
.github/workflows/new-nightly.yaml lines 28-48: the build-java-analyzer-bundle
job has mis-nested keys and several naming typos and missing commands; move the
strategy and steps keys to be indented under the build-java-analyzer-bundle job
(so they are children of that job), fix the repo typo "kovneyor/ruleset" ->
"konveyor/ruleset", ensure any job/step references use the actual step id
(change any needs: java_bundle_build and outputs references to point to the step
id of the image build step, e.g., steps.build_image.outputs.date if the step id
is build_image), rename the step id "dependnect-jobs" -> "dependent-jobs", and
add a concrete run: block for the "Define dependent jobs" step with the shell
commands required (or placeholder commands) so the step is complete; ensure all
indentation and YAML structure validate after these edits.
| - name: build image | ||
| id: build_image | ||
| run: | | ||
| DATE_TAG=$(date +%Y-%m-%d_%H-%M) | ||
| echo "date=${DATE_TAG}" >> $GITHUB_OUTPUT | ||
| podman build -t quay.io/konveyor/jdtls-server-base:nightly-${DATE_TAG} . | ||
| mkdir -p image_artifact | ||
| podman save quay.io/konveyor/jdtls-server-base:nightly-${DATE_TAG} image_artifact/quay.io_konveyor_jdtls-server-base_nightly-${DATE}.tar | ||
|
|
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.
Fix incorrect step reference in tar file name.
Line 63 references steps.java_bundle_build.outputs.date, but the step ID is build_image (line 57). This will cause a runtime failure.
- podman save quay.io/konveyor/jdtls-server-base:nightly-${DATE_TAG} image_artifact/quay.io_konveyor_jdtls-server-base_nightly-${DATE}.tar
+ podman save quay.io/konveyor/jdtls-server-base:nightly-${DATE_TAG} image_artifact/quay.io_konveyor_jdtls-server-base_nightly-${DATE_TAG}.tarAlso, the variable name is ${DATE_TAG}, not ${DATE}, so fix both issues.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: build image | |
| id: build_image | |
| run: | | |
| DATE_TAG=$(date +%Y-%m-%d_%H-%M) | |
| echo "date=${DATE_TAG}" >> $GITHUB_OUTPUT | |
| podman build -t quay.io/konveyor/jdtls-server-base:nightly-${DATE_TAG} . | |
| mkdir -p image_artifact | |
| podman save quay.io/konveyor/jdtls-server-base:nightly-${DATE_TAG} image_artifact/quay.io_konveyor_jdtls-server-base_nightly-${DATE}.tar | |
| - name: build image | |
| id: build_image | |
| run: | | |
| DATE_TAG=$(date +%Y-%m-%d_%H-%M) | |
| echo "date=${DATE_TAG}" >> $GITHUB_OUTPUT | |
| podman build -t quay.io/konveyor/jdtls-server-base:nightly-${DATE_TAG} . | |
| mkdir -p image_artifact | |
| podman save quay.io/konveyor/jdtls-server-base:nightly-${DATE_TAG} image_artifact/quay.io_konveyor_jdtls-server-base_nightly-${DATE_TAG}.tar |
🤖 Prompt for AI Agents
In .github/workflows/new-nightly.yaml around lines 56 to 64, the tar filename
incorrectly references the wrong step ID and wrong variable name; update any
GitHub Actions output references to use the actual step id "build_image" (e.g.
steps.build_image.outputs.date) and replace the shell variable ${DATE} with the
correct ${DATE_TAG} (or use ${{ steps.build_image.outputs.date }} where
appropriate) so the saved tar uses the produced DATE_TAG value.
| - name: upload artifact | ||
| uses: actions/upload-artifact@v4 | ||
| needs: java_bundle_build | ||
| with: | ||
| name: built-image | ||
| path: image_artifact/quay.io_konveyor_jdtls-server-base_nightly-${{ steps.java_bundle_build.outputs.date }}.tar | ||
|
|
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.
Invalid needs keyword in step and incorrect step references.
Line 67 uses needs: java_bundle_build, which is invalid for steps (only valid at job level). Additionally, the path references the wrong step ID.
- name: upload artifact
- uses: actions/upload-artifact@v4
- needs: java_bundle_build
with:
name: built-image
- path: image_artifact/quay.io_konveyor_jdtls-server-base_nightly-${{ steps.java_bundle_build.outputs.date }}.tar
+ path: image_artifact/quay.io_konveyor_jdtls-server-base_nightly-${{ steps.build_image.outputs.date }}.tarCommittable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 actionlint (1.7.8)
67-67: unexpected key "needs" for "step" section. expected one of "continue-on-error", "env", "id", "if", "name", "run", "shell", "timeout-minutes", "uses", "with", "working-directory"
(syntax-check)
70-70: property "java_bundle_build" is not defined in object type {build_image: {conclusion: string; outcome: string; outputs: {string => string}}; checkout: {conclusion: string; outcome: string; outputs: {commit: string; ref: string}}}
(expression)
| - name: Define dependent jobs | ||
| id: dependnect-jobs | ||
| run: | | ||
|
|
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.
Fix typo and implement empty step.
The "Define dependent jobs" step has a typo in its name and is not implemented (empty run command).
- name: Define dependent jobs
- id: dependnect-jobs
+ id: dependent-jobs
run: |
-
+ # TODO: Implement logic to define dependent jobs based on matrix.configConsider whether this step is needed, or remove it if it's a placeholder.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Define dependent jobs | |
| id: dependnect-jobs | |
| run: | | |
| - name: Define dependent jobs | |
| id: dependent-jobs | |
| run: | | |
| # TODO: Implement logic to define dependent jobs based on matrix.config |
🧰 Tools
🪛 actionlint (1.7.8)
75-75: string should not be empty
(syntax-check)
🤖 Prompt for AI Agents
.github/workflows/new-nightly.yaml around lines 73 to 76: the step named "Define
dependent jobs" contains a typo in the id (dependnect-jobs) and an empty run
block, leaving it as an unimplemented placeholder; either remove the step if
it's not needed or correct the id/name and implement the intended commands (or a
no-op comment) in the run block, e.g., fix the id to dependents-jobs (or
dependents) and add the actual shell commands to set outputs or define
dependencies, or delete the entire step if it serves no purpose.
| - name: set up docker buildx | ||
| if: "${{ inputs.component_name != '' }}" | ||
| uses: docker/setup-buildx-action@v2 | ||
|
|
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.
Update docker/setup-buildx-action to v3.
The current version is v3, which provides bug fixes and improved compatibility.
- name: set up docker buildx
- uses: docker/setup-buildx-action@v2
+ uses: docker/setup-buildx-action@v3
if: "${{ inputs.component_name != '' }}"Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 actionlint (1.7.8)
105-105: property "component_name" is not defined in object type {branch: string}
(expression)
106-106: the runner of "docker/setup-buildx-action@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue
(action)
🤖 Prompt for AI Agents
In .github/workflows/new-nightly.yaml around lines 104 to 107, the workflow uses
docker/setup-buildx-action@v2; update the action reference to
docker/setup-buildx-action@v3 to pick up the v3 fixes and compatibility
improvements (replace the uses line accordingly and keep the surrounding
conditional and name unchanged).
| - uses: actions/setup-go@v4 | ||
| with: | ||
| go-version: 1.23 | ||
|
|
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.
Update actions/setup-go to v6.
The latest version is v6, released September 2024, which upgrades the Node.js runtime and includes important dependency updates.
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
go-version: 1.23📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - uses: actions/setup-go@v4 | |
| with: | |
| go-version: 1.23 | |
| - uses: actions/setup-go@v5 | |
| with: | |
| go-version: 1.23 | |
🧰 Tools
🪛 actionlint (1.7.8)
183-183: the runner of "actions/setup-go@v4" action is too old to run on GitHub Actions. update the action's version to fix this issue
(action)
🤖 Prompt for AI Agents
.github/workflows/new-nightly.yaml around lines 183 to 186: update the GitHub
Action usage from actions/setup-go@v4 to actions/setup-go@v6; replace the uses
line with actions/setup-go@v6, keep the existing go-version input (1.23) unless
you want to bump it, then save and run the workflow to ensure compatibility and
that no inputs or behavior changed with v6.
* The new nightly job, will create the images from source * It will push the nightlies to quay if the all of the tests are passed * If it fails it will error out and publish to slack. * Note: The idea is that the last working nightly, is what CI will use for PR's to reduce the blast radius of a single change blocking all of CI. Signed-off-by: Shawn Hurley <[email protected]>
c7ebd51 to
198267a
Compare
Signed-off-by: Shawn Hurley <[email protected]>
Signed-off-by: Shawn Hurley <[email protected]>
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.
Actionable comments posted: 5
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
.github/actions/build-image/action.yml(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Verify api and ui tests run via
global-ci-bundle.ymlwith default input / e2e-api-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci-bundle.ymlwith default input / e2e-ui-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci.ymlwith default inputs / e2e-api-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci.ymlwith default inputs / e2e-ui-integration-tests
| image_tag: | ||
| description: | | ||
| The tag for the image (e.g., "latest", "v1.0.0") | ||
| required: true | ||
| type: string | ||
| default: "latest" |
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.
Input parameter has contradictory configuration.
The image_tag input is marked required: true but also has default: "latest". If a default is provided, the input should be required: false. Conversely, if it is truly required, remove the default.
Apply one of these diffs depending on intent:
Option 1: Remove the default (if truly required):
image_tag:
description: |
The tag for the image (e.g., "latest", "v1.0.0")
required: true
type: string
- default: "latest"Option 2: Make it optional with a default:
image_tag:
description: |
The tag for the image (e.g., "latest", "v1.0.0")
- required: true
+ required: false
type: string
default: "latest"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| image_tag: | |
| description: | | |
| The tag for the image (e.g., "latest", "v1.0.0") | |
| required: true | |
| type: string | |
| default: "latest" | |
| image_tag: | |
| description: | | |
| The tag for the image (e.g., "latest", "v1.0.0") | |
| required: true | |
| type: string |
| image_tag: | |
| description: | | |
| The tag for the image (e.g., "latest", "v1.0.0") | |
| required: true | |
| type: string | |
| default: "latest" | |
| image_tag: | |
| description: | | |
| The tag for the image (e.g., "latest", "v1.0.0") | |
| required: false | |
| type: string | |
| default: "latest" |
🤖 Prompt for AI Agents
In .github/actions/build-image/action.yml around lines 25 to 30 the input
"image_tag" is marked required: true while also providing default: "latest",
which is contradictory; either remove the default to keep it required, or set
required: false and keep the default so the input becomes optional. Update the
file accordingly: if you want callers to always supply a tag, delete the default
line and leave required: true; if you want a sensible fallback, change required:
true to required: false and keep default: "latest".
build-image/action.yml
Outdated
| - name: Build image with podman | ||
| id: build_image | ||
| run: | | ||
| IMAGE_NAME="${{ inputs.image_name }}" | ||
| IMAGE_TAG="${{ inputs.image_tag }}" | ||
| FULL_IMAGE_NAME="quay.io/konveyor/${IMAGE_NAME}:${IMAGE_TAG}" | ||
|
|
||
| echo "Building image: ${FULL_IMAGE_NAME}" | ||
| podman build \ | ||
| -f "${{ inputs.dockerfile_path }}" \ | ||
| -t "${FULL_IMAGE_NAME}" \ | ||
| "${{ inputs.build_context }}" | ||
|
|
||
| echo "Saving image to tar file..." | ||
| mkdir -p image_artifact | ||
| TAR_FILE="image_artifact/${IMAGE_NAME}_${IMAGE_TAG}.tar" | ||
| podman save "${FULL_IMAGE_NAME}" -o "${TAR_FILE}" | ||
|
|
||
| echo "image_name=${IMAGE_NAME}" >> $GITHUB_OUTPUT | ||
| echo "image_tag=${IMAGE_TAG}" >> $GITHUB_OUTPUT | ||
| echo "tar_file=${TAR_FILE}" >> $GITHUB_OUTPUT | ||
| echo "full_image_name=${FULL_IMAGE_NAME}" >> $GITHUB_OUTPUT |
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.
Missing shell directive and missing output declaration.
Line 87: The run: step is missing the required shell: bash directive for composite actions.
Additionally, this action sets outputs (image_name, image_tag, tar_file, full_image_name) via $GITHUB_OUTPUT but does not declare them in the action metadata. Composite actions must explicitly declare all outputs.
Apply this diff to add the shell directive:
- name: Build image with podman
id: build_image
+ shell: bash
run: |Then add output declarations at the top-level outputs: section (after the inputs: section and before runs:):
build_context:
description: |
Build context directory
type: string
default: "."
+
+outputs:
+ image_name:
+ description: "The name of the built image"
+ value: ${{ steps.build_image.outputs.image_name }}
+ image_tag:
+ description: "The tag of the built image"
+ value: ${{ steps.build_image.outputs.image_tag }}
+ tar_file:
+ description: "Path to the tar artifact file"
+ value: ${{ steps.build_image.outputs.tar_file }}
+ full_image_name:
+ description: "The full image name including registry"
+ value: ${{ steps.build_image.outputs.full_image_name }}
runs:📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Build image with podman | |
| id: build_image | |
| run: | | |
| IMAGE_NAME="${{ inputs.image_name }}" | |
| IMAGE_TAG="${{ inputs.image_tag }}" | |
| FULL_IMAGE_NAME="quay.io/konveyor/${IMAGE_NAME}:${IMAGE_TAG}" | |
| echo "Building image: ${FULL_IMAGE_NAME}" | |
| podman build \ | |
| -f "${{ inputs.dockerfile_path }}" \ | |
| -t "${FULL_IMAGE_NAME}" \ | |
| "${{ inputs.build_context }}" | |
| echo "Saving image to tar file..." | |
| mkdir -p image_artifact | |
| TAR_FILE="image_artifact/${IMAGE_NAME}_${IMAGE_TAG}.tar" | |
| podman save "${FULL_IMAGE_NAME}" -o "${TAR_FILE}" | |
| echo "image_name=${IMAGE_NAME}" >> $GITHUB_OUTPUT | |
| echo "image_tag=${IMAGE_TAG}" >> $GITHUB_OUTPUT | |
| echo "tar_file=${TAR_FILE}" >> $GITHUB_OUTPUT | |
| echo "full_image_name=${FULL_IMAGE_NAME}" >> $GITHUB_OUTPUT | |
| - name: Build image with podman | |
| id: build_image | |
| shell: bash | |
| run: | | |
| IMAGE_NAME="${{ inputs.image_name }}" | |
| IMAGE_TAG="${{ inputs.image_tag }}" | |
| FULL_IMAGE_NAME="quay.io/konveyor/${IMAGE_NAME}:${IMAGE_TAG}" | |
| echo "Building image: ${FULL_IMAGE_NAME}" | |
| podman build \ | |
| -f "${{ inputs.dockerfile_path }}" \ | |
| -t "${FULL_IMAGE_NAME}" \ | |
| "${{ inputs.build_context }}" | |
| echo "Saving image to tar file..." | |
| mkdir -p image_artifact | |
| TAR_FILE="image_artifact/${IMAGE_NAME}_${IMAGE_TAG}.tar" | |
| podman save "${FULL_IMAGE_NAME}" -o "${TAR_FILE}" | |
| echo "image_name=${IMAGE_NAME}" >> $GITHUB_OUTPUT | |
| echo "image_tag=${IMAGE_TAG}" >> $GITHUB_OUTPUT | |
| echo "tar_file=${TAR_FILE}" >> $GITHUB_OUTPUT | |
| echo "full_image_name=${FULL_IMAGE_NAME}" >> $GITHUB_OUTPUT |
🤖 Prompt for AI Agents
.github/actions/build-image/action.yml around lines 85 to 106: the composite
action run step is missing the required "shell: bash" directive and the action
metadata does not declare the outputs that the run step sets; add a "shell:
bash" key under the run step and add an outputs: section at top-level
(immediately after inputs: and before runs:) declaring image_name, image_tag,
tar_file, and full_image_name (with appropriate descriptions/defaults) so the
composite action explicitly exposes those outputs.
Signed-off-by: Shawn Hurley <[email protected]>
Signed-off-by: Shawn Hurley <[email protected]>
Signed-off-by: Shawn Hurley <[email protected]>
Signed-off-by: Shawn Hurley <[email protected]>
Signed-off-by: Shawn Hurley <[email protected]>
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.
Actionable comments posted: 2
🧹 Nitpick comments (1)
.github/workflows/test-build-image.yml (1)
3-82: Consider consolidating duplicated input definitions.The input schema for
workflow_call(lines 5–42) andworkflow_dispatch(lines 45–82) are identical. While GitHub Actions doesn't provide built-in DRY mechanisms for YAML anchors/reuse, this duplication increases maintenance burden. If these definitions ever diverge, it could lead to unexpected behavior differences between the two trigger modes.This is a quality-of-life improvement rather than a functional issue. If the repository has conventions for managing such duplication, consider applying them here.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
.github/workflows/test-build-image.yml(1 hunks)build-image/action.yml(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- build-image/action.yml
🧰 Additional context used
🪛 actionlint (1.7.8)
.github/workflows/test-build-image.yml
32-32: input "image_tag" of workflow_call event has the default value "latest", but it is also required. if an input is marked as required, its default value will never be used
(events)
89-89: description is required in metadata of "Build Image" action at "/home/jailuser/git/build-image/action.yml"
(action)
91-91: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
92-92: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
93-93: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
94-94: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
95-95: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
96-96: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
97-97: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Verify api and ui tests run via
global-ci-bundle.ymlwith default input / e2e-api-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci-bundle.ymlwith default input / e2e-ui-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci.ymlwith default inputs / e2e-api-integration-tests - GitHub Check: Verify api and ui tests run via
global-ci.ymlwith default inputs / e2e-ui-integration-tests
🔇 Additional comments (1)
.github/workflows/test-build-image.yml (1)
89-89: Verify composite action metadata is complete.Static analysis indicates the composite action at
./build-image/action.yml(referenced on line 89) is missing adescriptionfield in its action metadata. Ensure the action has a description defined to comply with GitHub Actions best practices.
| required: true | ||
| type: string | ||
| default: "latest" |
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.
Resolve conflicting image_tag input configuration.
The image_tag input is marked required: true but also provides default: "latest" (lines 30–32 and 70–72). When an input is required, its default value is never used by GitHub Actions, creating confusing expectations for callers.
Choose one:
- Option A: Remove the requirement if a default is intended:
- required: true + required: false default: "latest"
- Option B: Remove the default if the input must always be explicitly provided:
required: true - default: "latest"
Make this change in both workflow_call (lines 30–32) and workflow_dispatch (lines 70–72) sections.
Also applies to: 70-72
🧰 Tools
🪛 actionlint (1.7.8)
32-32: input "image_tag" of workflow_call event has the default value "latest", but it is also required. if an input is marked as required, its default value will never be used
(events)
🤖 Prompt for AI Agents
In .github/workflows/test-build-image.yml around lines 30-32 and 70-72, the
input "image_tag" is declared as required: true while also providing default:
"latest", which is contradictory; change both sections to be consistent by
removing required: true (Option A) so the default "latest" is used when callers
omit the input, and ensure both the workflow_call and workflow_dispatch
definitions are updated identically.
| repo: ${{ github.events.input.repo }} | ||
| ref: ${{ github.events.input.ref }} | ||
| base_image: ${{ github.events.input.base_image }} | ||
| image_name: ${{ github.events.input.image_name }} | ||
| image_tag: ${{ github.events.input.image_tag }} | ||
| dockerfile_path: ${{ github.events.input.dockerfile_path }} | ||
| build_context: ${{ github.events.input.build_context }} |
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.
Critical: Fix input context syntax to unblock workflow execution.
The workflow uses ${{ github.events.input.* }} (plural "events"), which is invalid. This will cause the step to fail silently with empty variables. The correct syntax depends on the triggering event:
- For
workflow_dispatch: use${{ github.event.inputs.* }}(singular "event") - For
workflow_call: use${{ inputs.* }}
Since this workflow supports both triggers, you need to choose one approach or conditionally reference the correct context. Most reusable workflows accessed via workflow_call pass inputs directly without referencing github.event.
Recommended fix (if workflow_call is the primary use case):
- name: Build Image
uses: ./build-image
with:
- repo: ${{ github.events.input.repo }}
- ref: ${{ github.events.input.ref }}
- base_image: ${{ github.events.input.base_image }}
- image_name: ${{ github.events.input.image_name }}
- image_tag: ${{ github.events.input.image_tag }}
- dockerfile_path: ${{ github.events.input.dockerfile_path }}
- build_context: ${{ github.events.input.build_context }}
+ repo: ${{ inputs.repo }}
+ ref: ${{ inputs.ref }}
+ base_image: ${{ inputs.base_image }}
+ image_name: ${{ inputs.image_name }}
+ image_tag: ${{ inputs.image_tag }}
+ dockerfile_path: ${{ inputs.dockerfile_path }}
+ build_context: ${{ inputs.build_context }}If manual dispatch (workflow_dispatch) must also work, you'll need conditional logic to handle both cases, or create separate workflows for each trigger type.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| repo: ${{ github.events.input.repo }} | |
| ref: ${{ github.events.input.ref }} | |
| base_image: ${{ github.events.input.base_image }} | |
| image_name: ${{ github.events.input.image_name }} | |
| image_tag: ${{ github.events.input.image_tag }} | |
| dockerfile_path: ${{ github.events.input.dockerfile_path }} | |
| build_context: ${{ github.events.input.build_context }} | |
| repo: ${{ inputs.repo }} | |
| ref: ${{ inputs.ref }} | |
| base_image: ${{ inputs.base_image }} | |
| image_name: ${{ inputs.image_name }} | |
| image_tag: ${{ inputs.image_tag }} | |
| dockerfile_path: ${{ inputs.dockerfile_path }} | |
| build_context: ${{ inputs.build_context }} |
🧰 Tools
🪛 actionlint (1.7.8)
91-91: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
92-92: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
93-93: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
94-94: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
95-95: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
96-96: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
97-97: property "events" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; artifact_cache_size_limit: number; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; output: string; path: string; ref: string; ref_name: string; ref_protected: bool; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repository_visibility: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; state: string; step_summary: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}
(expression)
🤖 Prompt for AI Agents
.github/workflows/test-build-image.yml lines 91-97: the step currently
references `${{ github.events.input.* }}` which is invalid and yields empty
values; replace those references with the correct context for your trigger: use
`${{ inputs.<name> }}` when the workflow is invoked via `workflow_call`, or `${{
github.event.inputs.<name> }}` for `workflow_dispatch`. If this workflow must
support both, change each variable to a conditional expression that selects
`inputs.<name>` when `github.event_name == 'workflow_call'` and
`github.event.inputs.<name>` when `github.event_name == 'workflow_dispatch'`,
ensuring defaults where appropriate so the step always receives a valid value.
The new nightly job, will create the images from source
It will push the nightlies to quay if the all of the tests are passed
If it fails it will error out and publish to slack.
Note: The idea is that the last working nightly, is what CI will use for PR's to reduce the blast radius of a single change blocking all of CI.
Summary by CodeRabbit
Tests
Chores