job made manual by `rules` are not optional
### Summary
The documentation says "Optional manual actions have allow_failure: true set by default and their Statuses do not contribute to the overall pipeline status" however,
when a job is made manual by adding `when: manual` in a rule, the job is not made optional
### Steps to reproduce
```yaml
image: docker:19.03.2
stages:
- stage1
hello:world:
stage: stage1
rules:
- when: manual
script:
- echo Bonjour World
```
with this gitlab-ci.yaml, a merge request cannot be merged until the job is manually started because the manual job is blocking the pipeline.
compared to this configuration:
```yaml
image: docker:19.03.2
stages:
- stage1
hello:world:
stage: stage1
rules:
- when: manual
script:
- echo Bonjour World
```
where the merge request can be merged immediately
I could add `allow_failure: true` but it would be applied to each rule and that's not what I want, for exemple consider this gitlab-ci.yaml:
```yaml
image: docker:19.03.2
stages:
- deploy
- build
build:api:
stage: build
rules:
- if: '$CI_PROJECT_PATH == "upstream/project" && $CI_COMMIT_REF_NAME == "prod"'
when: always
- changes:
- api/*
when: always
- when: manual
script:
- docker stack deploy ...
deploy:demo:
stage: deploy
needs: [build:api]
rules:
- if: '$CI_PROJECT_PATH == "upstream/project"'
when: never
- when: manual
script:
- docker stack deploy ...
```
here on a merge request I want to run build:api only if code has changed in the api folder or manual to deploy a demo environment. if code has changed, the merge request should not be mergeable if the automatic build fails. but if there's no code changes, the merge request should be mergeable without running the build:api job
issue