Skip to content

Conversation

@MasonM
Copy link
Member

@MasonM MasonM commented Feb 15, 2025

Fixes #14047 and fixes #14009

Motivation

If you have a CronWorkflow that's missing both schedules and schedule, or has schedules set to an empty array, you'll get an error in the UI when visiting /cron-workflows. This appears to have been introduced in #12616. You could argue this isn't a bug, since such CronWorkflows aren't valid, but multiple users have reported this, so we should gracefully handle it.

Modifications

This updates the UI code that fetches CronWorkflows from the API to normalize the response with a new normalizeSchedules() function that sets schedules to an empty array if it isn't present and automatically converts schedule to schedules:

// Handle CronWorkflows using the deprecated "schedule" field by automatically
// migrating them to use "schedules".
// Also, gracefully handle invalid CronWorkflows that are missing both
// "schedule" and "schedules".
function normalizeSchedules(cronWorkflow: any): CronWorkflow {
cronWorkflow.spec.schedules ??= [];
// TODO: Delete this once we drop support for "schedule"
if ((cronWorkflow.spec.schedule ?? '') != '') {
cronWorkflow.spec.schedules.push(cronWorkflow.spec.schedule);
delete cronWorkflow.spec.schedule;
}
return cronWorkflow as CronWorkflow;
}

Then, I deleted all the logic for handling schedule, since everything can now safely assume that schedules is present and is a non-empty array. Once we drop support for schedule completely, we could delete the logic for converting that to schedules, but it's only a few lines of code. I also added some basic tests.

Verification

First, I used kubectl apply to manually create three CronWorkflows, one missing both schedule and schedules, one with schedules set to an empty array, and one with schedule:

apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
  name: testschedulesmissinhg
spec:
  workflowSpec:
    entrypoint: main
    templates:
      - name: main
        container:
          image: argoproj/argosay:v2
---
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
  name: testschedulesemptyarray
spec:
  schedules: []
  workflowSpec:
    entrypoint: main
    templates:
      - name: main
        container:
          image: argoproj/argosay:v2
---
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
  name: testdeprecatedschedule
spec:
  schedule: "0 0 * * *"
  workflowSpec:
    entrypoint: main
    templates:
      - name: main
        container:
          image: argoproj/argosay:v2

I verified all three show up at http://localhost:8080/cron-workflows and can be edited:
image

I also verified that "Create New CronWorkflowworks with the exampleCronWorkflow`:
image

Documentation

N/A

…argoproj#14047

If you have a `CronWorkflow` that's missing both `schedules` and
`schedule`, or has `schedules` set to an empty array, you'll get an
error in the UI when visitng `/cron-workflows`. This appears to have
been introduced argoproj#12616.
You could argue this isn't a bug, since such `CronWorkflows` aren't
valid, but multiple users have reported this, so we should gracefully
handle it.

This updates the UI code that fetches `CronWorkflows` from the API to
normalize the response by setting `schedules` to an empty array if it
isn't present and automatically converting `schedule` to `schedules`.
Then, I deleted all the logic for handling `schedule`, since it's no
longer needed. Once we drop support for `schedule` completely, we could
delete the logic for converting that to `schedules`, but it's only a few
lines of code.

I also added some basic tests.

Signed-off-by: Mason Malone <651224+MasonM@users.noreply.github.com>
@MasonM MasonM added area/ui type/regression Regression from previous behavior (a specific type of bug) labels Feb 15, 2025
@MasonM MasonM marked this pull request as ready for review February 15, 2025 23:04
@MasonM MasonM requested review from Joibel and eduardodbr February 15, 2025 23:08
Copy link
Member

@terrytangyuan terrytangyuan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for this and detailed verifications!

@terrytangyuan terrytangyuan merged commit e9e7c43 into argoproj:main Feb 23, 2025
20 checks passed
@Joibel
Copy link
Member

Joibel commented Mar 12, 2025

/cherry-pick release-3.6

@gcp-cherry-pick-bot
Copy link

Cherry-pick failed with Merge error e9e7c4398c00621f697acf0002b7992028958daa into temp-cherry-pick-ee5b9b-release-3.6

@Joibel
Copy link
Member

Joibel commented Apr 22, 2025

@MasonM, any chance you could backport this to 3.6 as requested in #14259?

MasonM added a commit to MasonM/argo-workflows that referenced this pull request Apr 23, 2025
…rry-pick argoproj#14197)

This cherry-picks argoproj#14197
onto `release-3.6`. I had to resolve a conflict in
`ui/src/cron-workflows/cron-workflow-row.tsx` because that file doesn't
exist in the release branch, since it was added in
db6206a by extracting code from
`ui/src/cron-workflows/cron-workflow-list.tsx`.

Signed-off-by: Mason Malone <651224+MasonM@users.noreply.github.com>
@MasonM
Copy link
Member Author

MasonM commented Apr 23, 2025

@Joibel Sure: #14419

Joibel pushed a commit that referenced this pull request Apr 23, 2025
…rry-pick #14197) (#14419)

Signed-off-by: Mason Malone <651224+MasonM@users.noreply.github.com>
kim-codefresh added a commit to codefresh-io/argo-workflows that referenced this pull request May 20, 2025
…abilities fixes (Cr 28355) (#358)

* fix: bump deps for k8schain to fix ecr-login (argoproj#14008) (release-3.6 cherry-pick) (argoproj#14174)

* fix(ci): python sdk release process (release-3.6) (argoproj#14183)

Signed-off-by: Alan Clucas <alan@clucas.org>

* docs: clarify qps/burst on controller (cherry-pick argoproj#14190) (argoproj#14192)

Signed-off-by: Tim Collins <tim@thecollins.team>
Co-authored-by: Tim Collins <45351296+tico24@users.noreply.github.com>

* fix(api/jsonschema): use unchanging JSON Schema version (cherry-pick argoproj#14092) (argoproj#14256)

Signed-off-by: Roger Peppe <rogpeppe@gmail.com>
Co-authored-by: Roger Peppe <rogpeppe@gmail.com>

* fix(api/jsonschema): use working `$id` (cherry-pick argoproj#14257) (argoproj#14258)

Signed-off-by: Roger Peppe <rogpeppe@gmail.com>
Co-authored-by: Roger Peppe <rogpeppe@gmail.com>

* docs: autogenerate tested k8s versions and centralize config (argoproj#14176) (release-3.6) (argoproj#14262)

Signed-off-by: Mason Malone <651224+MasonM@users.noreply.github.com>
Signed-off-by: Alan Clucas <alan@clucas.org>
Co-authored-by: Mason Malone <651224+MasonM@users.noreply.github.com>

* chore(deps): bump minio-go to newer version (argoproj#14185) (release-3.6) (argoproj#14261)

Co-authored-by: Vaibhav Kaushik <vaibhavkaushik@salesforce.com>

* fix: split pod controller from workflow controller (argoproj#14129) (release-3.6) (argoproj#14263)

* chore(deps): fix snyk (argoproj#14264) (release-3.6) (argoproj#14268)

* chore: revert to correct k8s versions

Accidental bump from argoproj#14176 cherry-pick

Signed-off-by: Alan Clucas <alan@clucas.org>

* chore(deps): bump github.com/go-jose/go-jose/v3 from 3.0.3 to 3.0.4 in the go_modules group (cherry-pick argoproj#14231) (argoproj#14269)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: wait for workflow informer to sync before pod informer (cherry-pick argoproj#14248) (argoproj#14266)

Signed-off-by: Rohan K <rohankmr414@gmail.com>
Co-authored-by: Rohan K <rohankmr414@gmail.com>

* fix(cli): remove red from log colour selection. Fixes argoproj#6740 (cherry-pick argoproj#14215) (argoproj#14278)

Signed-off-by: Prabakaran Kumaresshan <4676330+nixphix@users.noreply.github.com>
Co-authored-by: Prabakaran Kumaresshan <4676330+nixphix@users.noreply.github.com>

* fix: correct semaphore configmap keys for multiple semaphores (argoproj#14184) (release-3.6) (argoproj#14281)

* fix: don't print help for non-validation errors. Fixes argoproj#14234 (cherry-pick argoproj#14249) (argoproj#14283)

Signed-off-by: Koichi Shimada <jumpe1programming@gmail.com>
Signed-off-by: Mason Malone <651224+MasonM@users.noreply.github.com>
Co-authored-by: koichi <51446844+jumpe1@users.noreply.github.com>
Co-authored-by: Mason Malone <651224+MasonM@users.noreply.github.com>

* docs: fix kubernetes versions (release-3.6) (argoproj#14273)

Signed-off-by: Alan Clucas <alan@clucas.org>

* fix(workflow/sync): use RWMutex to prevent concurrent map access (cherry-pick argoproj#14321) (argoproj#14322)

Signed-off-by: Ryan Currah <ryan@currah.ca>
Co-authored-by: Ryan Currah <ryan@currah.ca>

* chore(lint): update golangci-lint to 2.1.1 (argoproj#14390) (cherry-pick release-3.6) (argoproj#14417)

* chore: bump golang 1.23->1.24 (argoproj#14385) (cherry-pick release-3.6) (argoproj#14418)

* fix: gracefully handle invalid CronWorkflows and simplify logic.  (cherry-pick argoproj#14197) (argoproj#14419)

Signed-off-by: Mason Malone <651224+MasonM@users.noreply.github.com>

* fix: prevent dfs sorter infinite recursion on cycle. Fixes argoproj#13395 (cherry-pick argoproj#14391) (argoproj#14420)

Signed-off-by: Adrien Delannoy <a.delannoyfr@gmail.com>
Co-authored-by: Adrien Delannoy <a.delannoyfr@gmail.com>

* chore(deps): bump github.com/expr-lang/expr from 1.16.9 to 1.17.0 (argoproj#14307) (release-3.6) (argoproj#14421)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps)!: update k8s and argo-events (release-3.6) (argoproj#14424)

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: william.vanhevelingen <william.vanhevelingen@acquia.com>
Signed-off-by: Mason Malone <651224+MasonM@users.noreply.github.com>
Signed-off-by: William Van Hevelingen <william.vanhevelingen@acquia.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: William Van Hevelingen <William.VanHevelingen@acquia.com>
Co-authored-by: Mason Malone <651224+MasonM@users.noreply.github.com>

* fix: correct retry logic (argoproj#13734) (release-3.6) (argoproj#14428)

Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Alan Clucas <alan@clucas.org>
Co-authored-by: Isitha Subasinghe <isitha@pipekit.io>

* fix: manual retries exit handler cleanup. Fixes argoproj#14180 (argoproj#14181) (release-3.6) (argoproj#14429)

Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Alan Clucas <alan@clucas.org>
Co-authored-by: Isitha Subasinghe <isitha@pipekit.io>

* fix: correct manual retry logic. Fixes argoproj#14124 (argoproj#14328) (release-3.6) (argoproj#14430)

Signed-off-by: oninowang <oninowang@tencent.com>
Signed-off-by: Alan Clucas <alan@clucas.org>
Co-authored-by: jswxstw <jswxstw@gmail.com>

* fix: disable ALPN in argo-server as a workaround (argoproj#14433)

Signed-off-by: Alan Clucas <alan@clucas.org>

* result of codegen

Signed-off-by: Kim <kim.aharfi@codefresh.io>

* fix:lint

Signed-off-by: Kim <kim.aharfi@codefresh.io>

---------

Signed-off-by: Alan Clucas <alan@clucas.org>
Signed-off-by: Tim Collins <tim@thecollins.team>
Signed-off-by: Roger Peppe <rogpeppe@gmail.com>
Signed-off-by: Mason Malone <651224+MasonM@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Rohan K <rohankmr414@gmail.com>
Signed-off-by: Prabakaran Kumaresshan <4676330+nixphix@users.noreply.github.com>
Signed-off-by: Koichi Shimada <jumpe1programming@gmail.com>
Signed-off-by: Ryan Currah <ryan@currah.ca>
Signed-off-by: Adrien Delannoy <a.delannoyfr@gmail.com>
Signed-off-by: william.vanhevelingen <william.vanhevelingen@acquia.com>
Signed-off-by: William Van Hevelingen <william.vanhevelingen@acquia.com>
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: oninowang <oninowang@tencent.com>
Signed-off-by: Kim <kim.aharfi@codefresh.io>
Co-authored-by: Alan Clucas <alan@clucas.org>
Co-authored-by: gcp-cherry-pick-bot[bot] <98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com>
Co-authored-by: Tim Collins <45351296+tico24@users.noreply.github.com>
Co-authored-by: Roger Peppe <rogpeppe@gmail.com>
Co-authored-by: Mason Malone <651224+MasonM@users.noreply.github.com>
Co-authored-by: Vaibhav Kaushik <vaibhavkaushik@salesforce.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Rohan K <rohankmr414@gmail.com>
Co-authored-by: Prabakaran Kumaresshan <4676330+nixphix@users.noreply.github.com>
Co-authored-by: koichi <51446844+jumpe1@users.noreply.github.com>
Co-authored-by: Ryan Currah <ryan@currah.ca>
Co-authored-by: Adrien Delannoy <a.delannoyfr@gmail.com>
Co-authored-by: William Van Hevelingen <William.VanHevelingen@acquia.com>
Co-authored-by: Isitha Subasinghe <isitha@pipekit.io>
Co-authored-by: jswxstw <jswxstw@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/ui type/regression Regression from previous behavior (a specific type of bug)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cannot read properties of undefined (reading 'map') on /cron-workflows/ Cron Workflows UI Fails to Load

3 participants