Commit 45dff079 authored by Adrian DC's avatar Adrian DC
Browse files

fix: resolve #98: avoid running incomplete jobs in pipelines

parent 5cec035f
Loading
Loading
Loading
Loading
Loading
+1 −0
Changes for .gitlab-ci.yml: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -158,6 +158,7 @@ stages:
    - gitlabci-local -c ./tests/includes/.gitlab-ci.yml -p
    - gitlabci-local -c ./tests/extends/.gitlab-ci.yml -p
    - gitlabci-local -c ./tests/multilines/.gitlab-ci.yml -p
    - gitlabci-local -c ./tests/disabled/.gitlab-ci.yml -p
    - timeout 5 gitlabci-local -c ./tests/simple/.gitlab-ci.yml 'Job 1' --bash && exit 1 || true
    - timeout 5 gitlabci-local -c ./tests/simple/.gitlab-ci.yml 'Job 1' --debug && exit 1 || true
    - gcil -c ./tests/simple/.gitlab-ci.yml Job
+3 −3
Changes for gitlabci_local/menu.py: 3 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -82,9 +82,9 @@ def selector(options, jobs):
                job_details_list += ['On failure']
            jobs_available = True

        # Parser incomplete jobs
        if jobs[job]['options']['incomplete']:
            disabled = jobs[job]['options']['incomplete']
        # Parser disabled jobs
        if jobs[job]['options']['disabled']:
            disabled = jobs[job]['options']['disabled']

        # Failure allowed jobs
        if jobs[job]['allow_failure']:
+5 −4
Changes for gitlabci_local/parser.py: 5 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -357,12 +357,13 @@ def parser(options, data, environment):
        jobs[node] = stager(options, node, data, global_values)

        # Validate job script
        if not jobs[node]['options']['incomplete'] and not jobs[node]['script']:
        if not jobs[node]['options']['disabled'] and not jobs[node]['script']:
            raise ValueError('Missing "script" key for "%s / %s"' %
                             (jobs[node]['stage'], jobs[node]['name']))

        # Append unknown stage if required
        if jobs[node]['options']['incomplete'] and 'unknown' not in stages:
        if jobs[node]['options']['disabled'] and jobs[node][
                'stage'] == 'unknown' and 'unknown' not in stages:
            stages['unknown'] = list(stages.values())[-1] + 1

    # Sort jobs based on stages
@@ -397,8 +398,8 @@ def stager(options, job_name, data, global_values):
    job['allow_failure'] = None
    job['tags'] = None
    job['options'] = dict()
    job['options']['disabled'] = None
    job['options']['host'] = False
    job['options']['incomplete'] = None
    job['options']['quiet'] = False
    job['options']['silent'] = False

@@ -414,7 +415,7 @@ def stager(options, job_name, data, global_values):

            # Parse extended job
            if job_extend not in data:
                job['options']['incomplete'] = '%s unknown' % (job_extend)
                job['options']['disabled'] = '%s unknown' % (job_extend)
                if job['stage'] is None:
                    job['stage'] = 'unknown'
                break
+4 −0
Changes for gitlabci_local/runner.py: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -45,6 +45,10 @@ def launcher(options, jobs):
                                                               options.no_regex):
            continue

        # Filter disabled jobs
        if jobs[job]['options']['disabled']:
            continue

        # Raise initial result
        if result == None:
            result = True
+21 −0
Changes for tests/disabled/.gitlab-ci.yml: 21 added lines, 0 removed lines.
Original line number Diff line number Diff line
image: alpine:3

stages:
  - build
  - disabled

'Job 1':
  stage: build
  script:
    - echo 'Job 1'

.template_1:
  before_script:
    - echo 'Template 1 [BEFORE]'

'Job Broken 1':
  stage: disabled
  extends: template_1

'Job Broken 2':
  extends: template_2