CI anyOf/oneOf equivilant to check if a stage should run?

I’d really like to run the last stage of my pipeline if any of the jobs in the previous stage were successful. I have multiple child pipelines for integration tests. The appropriate one will be run and if it succeeds, I want to be able to deploy the code.

My goal is to not require the Deploy stage to depend on every job in the Integration Tests stage to pass. Just one. Any one. Is there a way to replicate an anyOf check based on the results of the previous stage?

I’ve looked at the rules documentation and the predefined pipeline variables and do not see a way to do this type of check.

int-tests:
  stage: Integration Tests
  when: manual
  allow_failure: false
  trigger:
    include:
      - project: andy/gitlab-integration-testing-integration-tests
        file: .gitlab-ci.yml
    strategy: depend
    
int-tests2:
  stage: Integration Tests
  when: manual
  allow_failure: false
  trigger:
    include:
      - project: andy/gitlab-integration-testing-integration-tests
        file: .gitlab-ci2.yml
    strategy: depend

int-tests3:
  stage: Integration Tests
  when: manual
  allow_failure: false
  trigger:
    include:
      - project: andy/gitlab-integration-testing-integration-tests
        file: .gitlab-ci3.yml
    strategy: depend


deploy:
  stage: Deploy
  script:
    - echo "Deployed!"

The above is my current pipeline. How can I make Deploy depend on one or more (any one) of the Integration Tests jobs pass successfully?

I haven’t been able to find a way to check that one (or any number of) job from the previous stage completed successfully. It’s a feature I’d like, but either it doesn’t exist or I can’t figure out how to do it based on the documentation.

What I’ve done is set all jobs in the Integration Tests stage to allow_failure: true then I created one required job in Integration Tests that is allow_failure: false. Then the deploy job is set to needs: ["required-job"]

This will work for now, as I was making the entire stage manual anyway so that only the specific tests I wanted to run would be run. There is no extra manual steps - that weren’t already here - required. To advance to the last stage, I just need to ensure that the required-job is run.

This is one big downside to this method. If I select a long running task to run and the required job at the same time, if the long running task fails, the required job will still succeed and the deployment can proceed. Order of the integration tests is important. I have to ensure that the required-job is run last.

Below is my modified .gitlab-ci.yml

int-tests:
  stage: Integration Tests
  when: manual
  allow_failure: true
  trigger:
    include:
      - project: andy/gitlab-integration-testing-integration-tests
        file: .gitlab-ci.yml
    strategy: depend
    
int-tests2:
  stage: Integration Tests
  when: manual
  allow_failure: true
  trigger:
    include:
      - project: andy/gitlab-integration-testing-integration-tests
        file: .gitlab-ci2.yml
    strategy: depend

int-tests3:
  stage: Integration Tests
  when: manual
  allow_failure: true
  trigger:
    include:
      - project: andy/gitlab-integration-testing-integration-tests
        file: .gitlab-ci3.yml
    strategy: depend
    
required-job:
  stage: Integration Tests
  when: manual
  script:
    - echo "Run required Int. Test job"
    
deploy:
  stage: Deploy
  needs: ["required-job"]
  script:
    - echo "Deployed!"