Commit 991ed134 authored by Dom Sekotill's avatar Dom Sekotill
Browse files

Add GitLab CI configuration

parent 3d247ae9
Loading
Loading
Loading
Loading
Loading

.gitlab-ci.yml

0 → 100644
+96 −0
Original line number Diff line number Diff line
stages:
- test
- build
- publish

image: python:3.9

variables:
  PIP_CACHE_DIR: $CI_PROJECT_DIR/cache/pkg
  PRE_COMMIT_HOME: $CI_PROJECT_DIR/cache/pre-commit

.cached-pkgs:
  cache:
    key: $CI_JOB_IMAGE
    paths: [cache/pkg]


Code Checks:
  stage: test
  image: docker.kodo.org.uk/ci-images/pre-commit:2.15.0-1
  cache:
    key: $CI_JOB_NAME
    paths: [cache]
  variables:
    HOOK_STAGE: commit
    FROM_REF: $CI_DEFAULT_BRANCH
  rules:
  - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    variables:
      FROM_REF: $CI_COMMIT_BEFORE_SHA
  - if: $CI_PIPELINE_SOURCE == "push"
  - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    variables:
      HOOK_STAGE: merge-commit
  script:
  - git fetch $CI_REPOSITORY_URL $FROM_REF:FROM_REF -f
  - pre-commit run
    --hook-stage=$HOOK_STAGE
    --from-ref=FROM_REF
    --to-ref=HEAD


Commit Graph Check:
  extends: ["Code Checks"]
  variables:
    HOOK_STAGE: push
  rules:
  - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    variables:
      FROM_REF: $CI_COMMIT_BEFORE_SHA
  - if: $CI_PIPELINE_SOURCE == "merge_request_event"


Check Tag:
  stage: test
  extends: [.cached-pkgs]
  rules:
  - if: $CI_COMMIT_TAG =~ /^v[0-9]/
  script:
  - pip install tomli packaging
  - |
    python <<-END
    import tomli
    from packaging.version import Version

    with open("pyproject.toml", "rb") as f:
      proj = tomli.load(f)

    assert Version("$CI_COMMIT_TAG") == Version(proj["tool"]["poetry"]["version"])
    END


Build Package:
  stage: build
  extends: [.cached-pkgs]
  script:
  - pip install build
  - python -m build
  artifacts:
    paths: [dist]


Upload Package:
  stage: publish
  extends: [.cached-pkgs]
  rules:
  - if: $CI_COMMIT_TAG =~ /^v[0-9]/
  script:
  - pip install twine
  - TWINE_USERNAME=gitlab-ci-token
    TWINE_PASSWORD=$CI_JOB_TOKEN
    twine upload
    --verbose
    --non-interactive
    --repository-url $CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/pypi
    dist/*