Na obsah stránky

Auto-merge pomocí CircleCI

| |

Před dvěma lety jsem psal, jak jsme dali práci robotům. Konkrétně Dependabotovi, který se stará o udržování aktuálních závislostí. Za ty dva roky se několik věcí změnilo. Dependabot byl koupen Githubem a započala se práce na nové integrované verzi. Ta už byla spuštěna, ale oproti předchozí verzi zatím funguje jen na veřejných repozitářích, nefunguje live mode a byla zrušena auto-merge funkcionalita. Což jsou teda zrovna zásadní featury, které v naší workflow šetří spoustu člověčí práce.

Github doporučuje na auto-merge použít některou z Github Actions. Co jsem tak na ně koukal, tak je to jen malý střípek mozaiky, který nezapadá do našich pipelines postavených nad skvělým CircleCI. Proto jsem pro tento případ užití vytvořil vlastní Orb: topmonks/github.

CircleCI Orbs jsou de-facto knihovny znovupoužitelných částí, ze kterých můžete stavět své workflows. Orbs můžete používat i inline ve vašich vlastních scriptech, bez nutnosti je publikovat jako knihovnu. A takto přesně vzniká naše knihovna topmonks/circle­ci, refactoringem z existujících build scriptů.

Auto Merge Pull Request

Základem je Github CLI, který přináší snadnou práci s Github APIs. Pro zamergování PR stačí zavolat příkaz gh pr merge a jako parametr mu dát číslo, branch nebo URL pull requestu. CircleCI nastavuje URL pull requestu do proměnné prostředí s názvem CI_PULL_REQUEST, takže výsledný příkaz vypadá nějak tak: gh pr merge $CI_PULL_REQUEST. Můžete přidat i další parametry, pokud třeba chcete, aby se změny squashovaly nebo rebasovaly.

Orb se aktuálně skládá ze dvou commandů: první nainstaluje Aktuální Github CLI do Ubuntu distribuce (všechny CircleCI image staví na Ubuntu), druhý provede merge s možností nastavení nepovinných CLI parametrů. Použití pak ve vašich build scriptech bude vypadat nějak tak:

version: 2.1
orbs:
  github: topmonks/github@1.0.2
jobs:
  build:
    # your build steps with tests
  merge_pr:
    docker:
      - image: cimg/base:2020.01
    steps:
      - checkout
      - github/install
      - github/merge_pr:
          rebase: true
workflows:
  ci:
    jobs:
     - build
     - merge_pr:
         context: github-cli
         requires:
           - build
         filters:
           branches:
             only: /dependabot\/.*/

Verze 2.1 zapíná podporu Orbs, pak naimportujeme topmonks/github orb, který následně použijeme v jobu merge_pr. V integračním workflow pak nastavíme, aby se merge_pr job pouštěl až po úspěšném buildu a pouze v dependabot/.* větvích. Důležitým detailem je řádek context: github-cli, který používá kontext, který jsem vytvořil v UI CircleCI a obsahuje proměnnou prostředí GITHUB_TOKEN. Ten si vygenerujete na Githubu. Budete potřebovat oprávnění read:org a repo.

Našli jste v článku chybu? Máte námět na reportáž? Založte mi ticket.