-
Notifications
You must be signed in to change notification settings - Fork 61
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
feat: fix tag #18118
feat: fix tag #18118
Conversation
WalkthroughThis pull request introduces multiple enhancements to the repository’s GitHub Actions workflows and supporting scripts. A new composite GitHub Action for updating helm-values charts is added, alongside a new workflow for deploying to an ArgoCD repository. Updates to existing workflows include additional input parameters, outputs, and conditional merge queue steps. Several new scripts and development dependencies have also been introduced to manage Docker build data, generate identifiers, and perform JSON data processing. Changes
Sequence Diagram(s)sequenceDiagram
participant User as "Trigger (Push/PR)"
participant Action as "Update Helm-Values Action"
participant Repo as "Helm-Values Repository"
participant FileSystem as "File System"
User->>Action: Provide input (files, PAT)
Action->>Repo: Checkout repository using PAT
loop For each file in input
Action->>FileSystem: Read source file
FileSystem-->>Action: File content
Action->>FileSystem: Copy file to destination
end
Action->>Repo: Stage changes, commit, push update
sequenceDiagram
participant GitHub as "GitHub (Workflow Trigger)"
participant Repo as "Repository"
participant Yarn as "Setup Yarn Action"
participant NodeScript as "Get Manifest Data Script"
participant UpdateAction as "Update Helm-Values Action"
GitHub->>Repo: Checkout code on push to main
Repo->>Yarn: Run setup-yarn action
Yarn->>NodeScript: Execute get-data.mjs script
NodeScript-->>GitHub: Manifest data output (MQ_HAS_OUTPUT)
alt Manifest output true
GitHub->>UpdateAction: Run update helm-values action with file list & PAT
else No manifest changes
Note right of GitHub: Skip update helm-values action
end
Possibly related PRs
Suggested labels
Suggested reviewers
📜 Recent review detailsConfiguration used: .coderabbit.yaml ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (12)
🧰 Additional context used📓 Path-based instructions (2)`scripts/**/*`: "Confirm that the code adheres to the follow...
`.github/**/*`: "Confirm that the code adheres to the follow...
🪛 actionlint (1.7.4).github/workflows/merge-queue.yml56-56: label "arc-runners" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-22.04", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "macos-12-xl", "macos-12-xlarge", "macos-12-large", "macos-12", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file (runner-label) 61-61: property "matrix-output" is not defined in object type {cache-check: {conclusion: string; outcome: string; outputs: {string => string}}; dockerargs: {conclusion: string; outcome: string; outputs: {string => string}}; dockerbuild: {conclusion: string; outcome: string; outputs: {string => string}}; gather: {conclusion: string; outcome: string; outputs: {string => string}}} (expression) 188-188: label "arc-runners" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-22.04", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "macos-12-xl", "macos-12-xlarge", "macos-12-large", "macos-12", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file (runner-label) .github/workflows/deploy-argocd.yml10-10: label "arc-runners" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-22.04", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "macos-12-xl", "macos-12-xlarge", "macos-12-large", "macos-12", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file (runner-label) 🪛 YAMLlint (1.35.1).github/workflows/merge-queue.yml[error] 218-218: trailing spaces (trailing-spaces) 🪛 Biome (1.9.4)scripts/ci/docker/write-data.mjs[error] 17-17: Avoid the use of spread ( Spread syntax should be avoided on accumulators (like those in (lint/performance/noAccumulatingSpread) ⏰ Context from checks skipped due to timeout of 90000ms (1)
🔇 Additional comments (26)
✨ Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
View your CI Pipeline Execution ↗ for commit bccf618.
☁️ Nx Cloud last updated this comment at |
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.
Caution
Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments. If you are seeing this consistently, please check "Code review limits" under "Moderation" settings.
Actionable comments posted: 4
🧹 Nitpick comments (15)
scripts/ci/docker/write-data.mjs (2)
15-20
: Optimize the reducer implementation to improve performance.The use of spread syntax on accumulators in reduce functions causes O(n²) time complexity as noted by the static analysis, which can become inefficient with larger datasets.
- const values = Object.keys(data).reduce((a, b) => { - return { - ...a, - [b]: data[b][key], - } - }, {}) + const values = Object.keys(data).reduce((a, b) => { + a[b] = data[b][key]; + return a; + }, {})🧰 Tools
🪛 Biome (1.9.4)
[error] 17-17: Avoid the use of spread (
...
) syntax on accumulators.Spread syntax should be avoided on accumulators (like those in
.reduce
) because it causes a time complexity ofO(n^2)
.
Consider methods such as .splice or .push instead.(lint/performance/noAccumulatingSpread)
1-30
: Add documentation about the expected data structure.The script would benefit from JSDoc comments explaining the expected structure of the
JSON_DATA
environment variable to enhance maintainability.// @ts-check +/** + * Processes JSON data from the JSON_DATA environment variable. + * Expected format of JSON_DATA: + * { + * "key1": { "value": "data1", ... }, + * "key2": { "value": "data2", ... }, + * ... + * } + * + * Output: + * [ + * { "id": "key1", "value": "data1", ... }, + * { "id": "key2", "value": "data2", ... }, + * ... + * ] + */ import fs from 'fs' import path from 'path'🧰 Tools
🪛 Biome (1.9.4)
[error] 17-17: Avoid the use of spread (
...
) syntax on accumulators.Spread syntax should be avoided on accumulators (like those in
.reduce
) because it causes a time complexity ofO(n^2)
.
Consider methods such as .splice or .push instead.(lint/performance/noAccumulatingSpread)
scripts/ci/docker/write-build-data.mjs (2)
58-58
: Fix typo in console output string.There's an extra closing brace at the end of the JSON.stringify output.
-console.info(`Build data ${JSON.stringify(value, null, 2)}}`) +console.info(`Build data ${JSON.stringify(value, null, 2)}`)
1-59
: Enhance documentation and error handling.The script effectively validates environment variables and exports them to GitHub Actions, but would benefit from clearer documentation.
// @ts-check /* * This script is used to write the build data to the output. */ +/** + * This script processes build data from environment variables and exports them + * for GitHub Actions. It validates required environment variables and exits with + * an error if any are missing. + * + * Required environment variables: + * - APP_NAME: The name of the application/project + * - TARGET: The build target + * - IMAGE_NAME: The Docker image name + * - DOCKER_TAG: The Docker image tag + * - MATRIX_ID: Unique identifier for the matrix job + */ import core from '@actions/core'.github/actions/update-helm-values/action.yml (4)
27-30
: Improve string handling for more robust script execution.The IFS setting and string splitting logic could be improved for better reliability.
- IFS=$IFS, - paths=() - read -a paths <<< $files - echo "$files\n$paths" + IFS=',' read -ra paths <<< "$files" + echo -e "Files to process: $files\nPaths array: ${paths[*]}"
47-47
: Fix echo command to properly display newlines.In Bash, you need to use the
-e
flag with echo to interpret escape sequences properly.- echo "Showing changeset\n $(git show)" + echo -e "Showing changeset\n$(git show)"
31-37
: Add error handling for file operations.The script currently doesn't check if the file operations succeed or fail. Adding error checking would make it more robust.
for path in ${paths[@]}; do export DEST="helm-values/charts/${path#charts/}" export DEST_PATH=$(dirname $DEST) - mkdir -p $DEST_PATH + mkdir -p $DEST_PATH || { echo "Failed to create directory $DEST_PATH"; exit 1; } echo "Copying filepath: ${path} to $DEST" - cp "$path" "$DEST" + cp "$path" "$DEST" || { echo "Failed to copy $path to $DEST"; exit 1; } done
39-48
: Add error handling for Git operations.The Git operations lack error checking, which could result in silent failures. Adding error handling improves reliability.
cd helm-values git config --global user.email "[email protected]" git config --global user.name "CI Bot" - git add . - git commit -m "Updated helm charts" + git add . || { echo "Failed to stage changes"; exit 1; } + # Only commit if there are changes + git diff --staged --quiet || git commit -m "Updated helm charts" || { echo "Failed to commit changes"; exit 1; } echo -e "Showing changeset\n $(git show)" - git push + git push || { echo "Failed to push changes"; exit 1; }scripts/ci/docker/generate-tag.mjs (2)
64-80
: Commented debugging code should be removed.There's a commented console.error statement that appears to be leftover debugging code.
Remove the commented debugging line to improve code cleanliness.
// UNKNOWN BRANCH - // console.error(`Unknown branch: ${targetBranch} - not sure how to tag this deployment`); throw new Error(`Unsupported branch: ${targetBranch}`)
95-102
: Consider using a more cryptographically secure random string generator.The current random string implementation uses Math.random() which isn't cryptographically secure.
For tags that might be used in security-sensitive contexts, consider using crypto.randomBytes():
function createRandomString(length) { - const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' - let result = '' - for (let i = 0; i < length; i++) { - result += chars.charAt(Math.floor(Math.random() * chars.length)) - } - return result + const crypto = require('crypto') + return crypto.randomBytes(Math.ceil(length/2)) + .toString('hex') + .slice(0, length) }.github/workflows/merge-queue.yml (2)
181-226
: Post-build processing follows CI pipeline best practices.The job properly handles artifacts, manifest data, and updates helm-values repository when needed.
Consider adding a timeout to this job to prevent long-running stuck processes, similar to what you have in the tests job.
post-docker-build: needs: - docker-build - prepare permissions: id-token: write contents: write runs-on: arc-runners + timeout-minutes: 30 steps:
🧰 Tools
🪛 actionlint (1.7.4)
188-188: label "arc-runners" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-22.04", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "macos-12-xl", "macos-12-xlarge", "macos-12-large", "macos-12", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
🪛 YAMLlint (1.35.1)
[error] 218-218: trailing spaces
(trailing-spaces)
218-218
: Minor formatting issue: trailing whitespace.There are trailing spaces at line 218.
Remove trailing whitespace to keep the file clean.
- +🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 218-218: trailing spaces
(trailing-spaces)
scripts/ci/docker/get-data.mjs (3)
28-59
: Complex nested conditionals in YAML parsing.The code to check for the presence of an image object in YAML files uses deeply nested conditionals.
Consider simplifying the nested conditions with optional chaining:
if ( - yamlContent && - typeof yamlContent === 'object' && - 'image' in yamlContent && - yamlContent.image && - typeof yamlContent.image === 'object' && - 'repository' in yamlContent.image + yamlContent?.image?.repository && + typeof yamlContent === 'object' && + typeof yamlContent.image === 'object' ) {
92-97
: Improve error messaging for unsupported event types.The error message for unsupported event types could be more informative.
Enhance the error message to provide more context:
function getBranch() { if (eventName === 'merge_group') { return context.payload.merge_group.base_ref.replace('refs/heads/', '') } - throw new Error(`Unsupported event: ${context.eventName}`) + throw new Error(`Unsupported event type: ${context.eventName}. This script only supports 'merge_group' events.`) }
121-130
: Generic error message in getArtifactname function.The error message when no valid deployment type is found is too generic.
Improve error messaging for clarity:
function getArtifactname() { if (typeOfDeployment.dev) { return `main-${sha}` } if (typeOfDeployment.prod) { return `release-${sha}` } - throw new Error(`Unsupported`) + throw new Error(`Unsupported deployment type. Expected dev or prod but got: ${JSON.stringify(typeOfDeployment)}`) }
🛑 Comments failed to post (4)
scripts/ci/docker/generate-tag.mjs (2)
24-42:
⚠️ Potential issueIncorrect error handling in pull request events.
The function throws an error for pull request events instead of generating a tag, with commented-out code that would provide the expected functionality.
This appears to be intentional but should be documented. If pull requests should not trigger this functionality, consider adding a comment explaining why it's disabled rather than leaving commented code that suggests it could work.
if (eventName === 'pull_request' && context.payload.pull_request?.number) { throw new Error(`Unsupported event: ${eventName}`) - // return `pr-${context.payload.pull_request.number}-${randomTag}`; + // Pull request tagging intentionally disabled - only merge queue events are supported }📝 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.function getTagname() { if (eventName === 'pull_request' && context.payload.pull_request?.number) { throw new Error(`Unsupported event: ${eventName}`) // Pull request tagging intentionally disabled - only merge queue events are supported } if (eventName === 'merge_group') { const dateString = new Date().toISOString().split('T')[0].replace(/-/g, '') if (typeOfDeployment.dev) { return `main_${dateString}_${randomTag}` } if (typeOfDeployment.prod) { return `release_${dateString}_${randomTag}` } throw new Error(`Unable to determine artifact name for merge_group event`) } throw new Error( `Unable to determine artifact name for event type: ${eventName}`, ) }
44-62:
⚠️ Potential issueSimilar error handling issue in getArtifactname function.
The function follows the same pattern as getTagname, throwing errors for pull request events with commented-out alternative implementation.
Consider using the same approach as suggested for the getTagname function to maintain consistency.
if (eventName === 'pull_request' && context.payload.pull_request?.number) { throw new Error(`Unsupported event: ${eventName}`) - // return `pr-${context.payload.pull_request.number}`; + // Pull request artifact naming intentionally disabled - only merge queue events are supported }📝 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.function getArtifactname() { if (eventName === 'pull_request' && context.payload.pull_request?.number) { throw new Error(`Unsupported event: ${eventName}`) // Pull request artifact naming intentionally disabled - only merge queue events are supported } if (eventName === 'merge_group') { if (typeOfDeployment.dev) { return `main-${context.payload.merge_group.head_sha}` } if (typeOfDeployment.prod) { return `release-${context.payload.merge_group.head_sha}` } throw new Error(`Unable to determine artifact name for merge_group event`) } throw new Error( `Unable to determine artifact name for event type: ${eventName}`, ) }
scripts/ci/docker/get-data.mjs (2)
99-119: 🛠️ Refactor suggestion
Default case returns empty deployment type values.
The getTypeOfDeployment function returns an object with all false values for unknown branches, which could lead to subtle bugs.
Consider throwing an error for unknown deployment types instead of returning all-false values:
if (branch.startsWith('release')) { return { dev: false, staging: false, prod: true, } } - return { - dev: false, - staging: false, - prod: false, - } + throw new Error(`Unknown branch type: ${branch}. Cannot determine deployment 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.function getTypeOfDeployment() { if (branch === 'main' || branch === 'mq-docker-pre-main') { return { dev: true, staging: false, prod: false, } } if (branch.startsWith('release')) { return { dev: false, staging: false, prod: true, } } throw new Error(`Unknown branch type: ${branch}. Cannot determine deployment type.`) }
63-90: 🛠️ Refactor suggestion
parseData function could use more robust error handling.
The function parses JSON data and updates YAML files but has minimal error handling.
Add try/catch blocks to handle potential JSON parsing errors and file writing failures:
async function parseData() { const fileName = `/tmp/data.json` if (!fs.existsSync(fileName)) { process.exit(0) } - const fileData = fs.readFileSync(fileName, 'utf-8') - const parsedData = JSON.parse(fileData) + let parsedData + try { + const fileData = fs.readFileSync(fileName, 'utf-8') + parsedData = JSON.parse(fileData) + } catch (error) { + console.error(`Error reading or parsing data file: ${error.message}`) + process.exit(1) + } for (const value of parsedData) { const { project, imageName, imageTag } = value console.log(`Changing value for imageName ${imageName}`) if (imageName in IMAGE_OBJECT) { IMAGE_OBJECT[imageName].forEach(({ filePath, content }) => { content.image.tag = imageTag const newFile = jsyaml.dump(content) console.log(newFile) - fs.writeFileSync(filePath, newFile, { encoding: 'utf-8' }) - changedFiles.push(filePath) - console.info(`Updated ${filePath}`) + try { + fs.writeFileSync(filePath, newFile, { encoding: 'utf-8' }) + changedFiles.push(filePath) + console.info(`Updated ${filePath}`) + } catch (error) { + console.error(`Error writing to ${filePath}: ${error.message}`) + } }) } else { console.info(`Skipping ${imageName}…`) } }📝 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.async function parseData() { const fileName = `/tmp/data.json` if (!fs.existsSync(fileName)) { process.exit(0) } let parsedData try { const fileData = fs.readFileSync(fileName, 'utf-8') parsedData = JSON.parse(fileData) } catch (error) { console.error(`Error reading or parsing data file: ${error.message}`) process.exit(1) } for (const value of parsedData) { const { project, imageName, imageTag } = value console.log(`Changing value for imageName ${imageName}`) if (imageName in IMAGE_OBJECT) { IMAGE_OBJECT[imageName].forEach(({ filePath, content }) => { content.image.tag = imageTag const newFile = jsyaml.dump(content) console.log(newFile) try { fs.writeFileSync(filePath, newFile, { encoding: 'utf-8' }) changedFiles.push(filePath) console.info(`Updated ${filePath}`) } catch (error) { console.error(`Error writing to ${filePath}: ${error.message}`) } }) } else { console.info(`Skipping ${imageName}…`) } } console.log(`Changed files is ${changedFiles.join(',')}`) core.setOutput(_KEY_HAS_OUTPUT, 'true') core.setOutput(_KEY_CHANGED_FILES, changedFiles.join(',')) }
* ci: docker deployment test (#18084) * chore: test * fix: test * fix: test * chore: test 2 * fix: better generate tag script * chore: test build * fix: test 2 * fix: add prepare * fix: oops * fix: wtf * fix: faster * fix: forgot * fix: ok * fix: ok * fix: wtf * fix: ok * fix: ok * fix: i hope * fix: debug * fix: ok * fix: debug * fix: wtf * fix: ok * fix: oops * fix: texst 2 * fix: debug * fix: oops * fix: export variable * fix: docker chunks * fix: chunks * fix: oops * fix: oh god * fix: oops * fix: add git branch * fix: add sha * feat: write build data * fix: upload artifact * fix: typo * fix: ok * fix: test * fix: ok * fix: use cloudposse for matrix output * feat: upload artifact * fix: write data * fix: permission * fix: test * fix: upload * fix: ok * fix: ok * fix: deploy * fix: oops * fix: okok * fix: ok * fix: ok * fix: ok * fix: ok * fix: ok * fix: fix * fix: 2 * fix: ok hehe * fix: ok changes * fix: ok * fix: ok * fix: test * fix: ok * fix: ok * fix: ok * fix: hoho * Feature/update helm values (#18100) * feat(ci): Commit helm charts to helm-values repository * feat(ci): Changing the steps order of the implementation * feat(ci): Implementing logic * feat(ci): Change implementation to use composite action --------- Co-authored-by: Ingvar Sigurðsson <[email protected]> * fix: fix fix * fix: ok * fix: ok * fix: sorry * fix: ok * fix: update manifest with bs * fix: changed files * fix: copy * fix: create directory if it does not exist * fix: test * fix: sha * fix: target * fix: ok * fix: ok * fix: ok * fix: ok * fix: test * fix: sha --------- Co-authored-by: Ingvar Sigurðsson <[email protected]> * fix: cleanup * fix: apply on mq (#18113) fiX: ok * feat: fix tag (#18118) fix: debug msg * fix: small fixes (#18127) * fix: remove test branch * fix: move yarn install * feat: get ready for release (#18136) * fix: ok * fix: ignore * fix: ok * fix: get sha * fix: ok * fix: ok * fix: ok * fix: error * fix: skip run * fix: ok * fix: merge * fix: nothing should happen (#18149) * chore: addding ssh key (#18145) * addding ssh key * fix: passing the key * fix: missed a spot * fix: test * fix: remove * fix: ok * fix: set secret * fix: test * fix: ok * fix: ok * fix: install 2 * fix: remove --------- Co-authored-by: lommi <[email protected]> * fix: update path using helm values * fix: mq-docker * chore: test prod and staging (#18160) * fix: mq-docker-main * fix: ugly hack remove this before going to main * fix: mq docker pre main * fix: mq workflow (#18162) * fix: format * fix: ok --------- Co-authored-by: Ingvar Sigurðsson <[email protected]> Co-authored-by: Róberta Andersen <[email protected]>
...
Attach a link to issue if relevant
What
Specify what you're trying to achieve
Why
Specify why you need to achieve this
Screenshots / Gifs
Attach Screenshots / Gifs to help reviewers understand the scope of the pull request
Checklist:
Summary by CodeRabbit
New Features
Chores