Skip to content
  • Ricardo Martincoski's avatar
    .gitlab-ci.yml: add trigger per job · d0ca1617
    Ricardo Martincoski authored
    
    
    Triggering a single defconfig or runtime test job can be handy:
     - when adding or changing a defconfig;
     - when adding or changing a runtime test case;
     - when fixing some bug on a use case tested by a runtime test case.
    
    Currently there are 3 subsets of jobs that can easily be triggered by
    pushing a temporary branch with specific suffix:
     - to trigger only the check-* jobs:
       $ git push gitlab HEAD:<name>                   # currently   4 jobs
     - to trigger all defconfigs and all check-* jobs:
       $ git push gitlab HEAD:<name>-defconfigs        # currently 197 jobs
     - to trigger all runtime tests and all check-* jobs:
       $ git push gitlab HEAD:<name>-runtime-tests     # currently 118 jobs
    
    When the user wants to trigger a single defconfig or runtime test job,
    hand-editing the .gitlab-ci.yml and creating a temporary commit are
    currently needed.
    
    Add 2 more subsets that can be triggered based on the name of the
    branch pushed.
     - to trigger one defconfig job:
       $ git push gitlab HEAD:<name>-<defconfig name>  # currently   1 jobs
     - to trigger one runtime job:
       $ git push gitlab HEAD:<name>-<test case name>  # currently   1 jobs
    
    The check-* jobs are fast, so there is no need to add a per job trigger
    for them.
    
    While adding those new triggers, use the full name of the job as suffix.
    This leads to large branch names:
    $ git push gitlab HEAD:test1-tests.toolchain.test_external.TestExternalToolchainBuildrootuClibc
    $ git push gitlab HEAD:test2-olimex_a20_olinuxino_lime_legacy_defconfig
    But those branches are temporary, and this way the user don't need to
    think much, just copy and paste the job name as suffix.
    
    The hidden keys that now hold the commonalities between jobs does not
    hold only a script anymore, so rename then from *_script to *_base.
    
    Signed-off-by: default avatarRicardo Martincoski <ricardo.martincoski@gmail.com>
    Cc: Arnout Vandecappelle <arnout@mind.be>
    Cc: Matt Weber <matthew.weber@rockwellcollins.com>
    Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
    ---
    Changes v3 -> v4:
      - rebase after removing one patch from the series;
    
    Changes v2 -> v3:
      - use a separate job to build one defconfig or run one runtime test
        (suggested by Arnout);
      - do not run check-* jobs when a single job (defconfig or runtime
        test) was requested (suggested by Thomas in reply to the cover
        letter of v1);
    
    Changes v1 -> v2:
      - use shell-based implementation instead of complexes awk calls, it is
        simpler and easier to read (suggested by Thomas);
      - since now the value for 'only' is overridden by the script, add a
        note on .gitlab-ci.yml*;
    
    For test purposes I created a commit that makes all defconfigs and
    runtime tests to echo the command that would be called instead of
    actually calling it and then I asked Gitlab CI to run:
     - only the check-* jobs:
    TODO
     - all defconfigs and all check-* jobs:
    TODO
     - all runtime tests and all check-* jobs:
    TODO
     - all jobs (using a tag):
    TODO
    
    Using the entire series (without the test commit above) I also asked 20
    random jobs:
    $ for job in \
      $(grep '_defconfig:\|^tests' .gitlab-ci.yml | sed -e 's,:.*,,g' | shuf -n 20); do \
      git push gitlab HEAD:trigger-per-job-v4-$job ; \
      done
    TODO
    d0ca1617
Validating GitLab CI configuration… Learn more