---

# global settings
image: alpine:latest
after_script:
  - .ci/lib/move_logs.sh $CI_PROJECT_DIR
stages:
  - lint
  - build

# defaults for "only"
# We need to run the CI jobs in a "merge request specific context", if CI is
# running in a merge request. Otherwise the environment variable that holds the
# merge request ID is not available. This means, we must set the "only"
# variable accordingly - and if we only do it for one job, all other jobs will
# not get executed. So have the defaults here, and use them in all jobs that
# should run on both the master branch, and in merge requests.
# https://docs.gitlab.com/ee/ci/merge_request_pipelines/index.html#excluding-certain-jobs
.only-default: &only-default
  only:
    - master
    - merge_requests
    - tags

# device documentation
wiki:
  stage: lint
  <<: *only-default
  only:
    refs:
      - merge_requests
    changes:
      - device/*/device-*/*
  script:
    - .ci/lib/gitlab_prepare_ci.sh
    - .ci/wiki.sh

# testcases linting
flake8:
  stage: lint
  <<: *only-default
  only:
    refs:
      - merge_requests
    changes:
      - .ci/*
      - .ci/*/*
  before_script:
    - apk -q add py-flake8
  script:
    - .ci/lib/gitlab_prepare_ci.sh
    - .ci/flake8.sh

# shellcheck and various grep checks
shellcheck-grep:
  stage: lint
  <<: *only-default
  image: alpine:edge
  script:
    - .ci/lib/gitlab_prepare_ci.sh
    - .ci/shellcheck.sh
    - .ci/grep.sh

editor-config:
  stage: lint
  <<: *only-default
  image: alpine:edge
  script:
    - .ci/lib/gitlab_prepare_ci.sh
    - .ci/ec.sh

# aports checks (generic)
pytest-commits:
  stage: lint
  <<: *only-default
  script:
    - .ci/lib/gitlab_prepare_ci.sh
    - .ci/pytest.sh
    - .ci/commits.sh
  artifacts:
    when: on_failure
    paths:
      - log.txt
      - log_testsuite_pmaports.txt
      - pmbootstrap.cfg
    expire_in: 1 week

# APKBUILD linting
aport-lint:
  stage: lint
  script:
    - .ci/lib/gitlab_prepare_ci.sh
    - .ci/apkbuild-lint.sh
  only:
    - merge_requests
  allow_failure: true

# kernel kconfig check
kernel-kconfig:
  stage: lint
  only:
    refs:
      - master
      - merge_requests
    changes:
      - device/*/linux-*/config-*
      - main/linux-*/config-*
  script:
    - .ci/lib/gitlab_prepare_ci.sh
    - .ci/kconfig.sh

# MR settings
# (Checks for "Allow commits from members who can merge to the target branch")
mr-settings:
  stage: lint
  only:
    - merge_requests
  before_script:
    - apk -q add python3
  script:
    - wget -q "https://gitlab.com/postmarketOS/ci-common/-/raw/master/check_mr_settings.py"
    - python3 ./check_mr_settings.py

# build changed aports
.build:
  stage: build
  <<: *only-default
  before_script:
    - .ci/lib/gitlab_prepare_ci.sh
  after_script:
    - cp -r /home/pmos/.local/var/pmbootstrap/packages/ packages/ || true
  artifacts:
    expire_in: 1 week
    paths:
      - packages/
  timeout: 10 h

build-x86_64:
  extends: .build
  script:
    - .ci/build-x86_64.sh

build-x86:
  extends: .build
  script:
    - .ci/build-x86.sh

build-aarch64:
  extends: .build
  script:
    - .ci/build-aarch64.sh

build-armv7:
  extends: .build
  script:
    - .ci/build-armv7.sh

build-armhf:
  extends: .build
  script:
    - .ci/build-armhf.sh

build-riscv64:
  extends: .build
  script:
    - .ci/build-riscv64.sh