image: archlinux:base-devel cache: key: system-v1 paths: # For some reason Gitlab CI only supports storing cache/artifacts in a path relative to the build directory - .pkg-cache - .venv - .pre-commit variables: AUR_CONFIG: conf/config # Default MySQL config setup in before_script. DB_HOST: localhost TEST_RECURSION_LIMIT: 10000 CURRENT_DIR: "$(pwd)" LOG_CONFIG: logging.test.conf lint: stage: .pre before_script: - pacman -Sy --noconfirm --noprogressbar --cachedir .pkg-cache archlinux-keyring - pacman -Syu --noconfirm --noprogressbar --cachedir .pkg-cache git python python-pre-commit script: # https://github.com/pre-commit/pre-commit/issues/2178#issuecomment-1002163763 - export SETUPTOOLS_USE_DISTUTILS=stdlib - export XDG_CACHE_HOME=.pre-commit - pre-commit run -a test: stage: test tags: - fast-single-thread before_script: - export PATH="$HOME/.poetry/bin:${PATH}" - ./docker/scripts/install-deps.sh - virtualenv -p python3 .venv - source .venv/bin/activate # Enable our virtualenv cache - ./docker/scripts/install-python-deps.sh - useradd -U -d /aurweb -c 'AUR User' aur - ./docker/mariadb-entrypoint.sh - (cd '/usr' && /usr/bin/mysqld_safe --datadir='/var/lib/mysql') & - 'until : > /dev/tcp/127.0.0.1/3306; do sleep 1s; done' - cp -v conf/config.dev conf/config - sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config - ./docker/test-mysql-entrypoint.sh # Create mysql AUR_CONFIG. - make -C po all install # Compile translations. - make -C doc # Compile asciidoc. - make -C test clean # Cleanup coverage. script: # Run sharness. - make -C test sh # Run pytest. - pytest --junitxml="pytest-report.xml" - make -C test coverage # Produce coverage reports. coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' artifacts: reports: junit: pytest-report.xml coverage_report: coverage_format: cobertura path: coverage.xml .init_tf: &init_tf - pacman -Syu --needed --noconfirm --cachedir .pkg-cache terraform - export TF_VAR_name="aurweb-${CI_COMMIT_REF_SLUG}" - TF_ADDRESS="${CI_API_V4_URL}/projects/${TF_STATE_PROJECT}/terraform/state/${CI_COMMIT_REF_SLUG}" - cd ci/tf - > terraform init \ -backend-config="address=${TF_ADDRESS}" \ -backend-config="lock_address=${TF_ADDRESS}/lock" \ -backend-config="unlock_address=${TF_ADDRESS}/lock" \ -backend-config="username=x-access-token" \ -backend-config="password=${TF_STATE_GITLAB_ACCESS_TOKEN}" \ -backend-config="lock_method=POST" \ -backend-config="unlock_method=DELETE" \ -backend-config="retry_wait_min=5" deploy_review: stage: deploy script: - *init_tf - terraform apply -auto-approve environment: name: review/$CI_COMMIT_REF_NAME url: https://aurweb-$CI_ENVIRONMENT_SLUG.sandbox.archlinux.page on_stop: stop_review auto_stop_in: 1 week rules: - if: $CI_MERGE_REQUEST_ID && $CI_PROJECT_PATH == "archlinux/aurweb" when: manual stop_review: stage: deploy needs: - deploy_review script: - *init_tf - terraform destroy -auto-approve - 'curl --silent --show-error --fail --header "Private-Token: ${TF_STATE_GITLAB_ACCESS_TOKEN}" --request DELETE "${CI_API_V4_URL}/projects/${TF_STATE_PROJECT}/terraform/state/${CI_COMMIT_REF_SLUG}"' environment: name: review/$CI_COMMIT_REF_NAME action: stop rules: - if: $CI_MERGE_REQUEST_ID && $CI_PROJECT_PATH == "archlinux/aurweb" when: manual