117 lines
2.8 KiB
YAML
117 lines
2.8 KiB
YAML
stages:
|
|
- lint
|
|
- test
|
|
- build
|
|
- deploy
|
|
|
|
.install-deps-script: &install-deps
|
|
- curl -sSL https://install.python-poetry.org | python -
|
|
- export PATH=$PATH:$HOME/.local/bin
|
|
- poetry --version
|
|
- poetry install
|
|
|
|
.base:
|
|
image: python:3.11.2
|
|
only:
|
|
changes:
|
|
- "poetry.lock"
|
|
- "pyproject.toml"
|
|
- "app/*"
|
|
|
|
.test:
|
|
extends: .base
|
|
stage: test
|
|
before_script:
|
|
- *install-deps
|
|
|
|
.lint:
|
|
extends: .base
|
|
stage: lint
|
|
before_script:
|
|
- *install-deps
|
|
|
|
######################################
|
|
# #
|
|
# LINT STEPS #
|
|
# #
|
|
######################################
|
|
|
|
black:
|
|
extends: .lint
|
|
script:
|
|
- poetry run black . --check --verbose --diff
|
|
|
|
flake8:
|
|
extends: .lint
|
|
script:
|
|
- poetry run flake8
|
|
|
|
isort:
|
|
extends: .lint
|
|
script:
|
|
- poetry run isort --check .
|
|
|
|
######################################
|
|
# #
|
|
# TEST STEPS #
|
|
# #
|
|
######################################
|
|
|
|
test:
|
|
extends: .test
|
|
coverage: '/TOTAL.*\s+(\d+\%)/'
|
|
script:
|
|
- poetry run pytest --cov -v
|
|
|
|
######################################
|
|
# #
|
|
# BUILD STEPS #
|
|
# #
|
|
######################################
|
|
|
|
build:
|
|
stage: build
|
|
image: docker:23.0.1
|
|
services:
|
|
- name: docker:23.0.1-dind
|
|
alias: docker
|
|
variables:
|
|
DOCKER_HOST: tcp://docker:2375
|
|
DOCKER_DRIVER: overlay2
|
|
DOCKER_TLS_CERTDIR: ""
|
|
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
|
|
script:
|
|
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
|
|
- docker build -f Dockerfile -t $IMAGE_TAG --build-arg version=$CI_COMMIT_SHA .
|
|
- docker push $IMAGE_TAG
|
|
only:
|
|
changes:
|
|
- "Dockerfile"
|
|
- "poetry.lock"
|
|
- "pyproject.toml"
|
|
- "app/*"
|
|
|
|
######################################
|
|
# #
|
|
# DEPLOY STEPS #
|
|
# #
|
|
######################################
|
|
|
|
deploy:
|
|
stage: deploy
|
|
image: debian:latest
|
|
before_script:
|
|
- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
|
|
- eval $(ssh-agent -s)
|
|
- chmod 400 "$SSH_PRIVATE_KEY"
|
|
- ssh-add "$SSH_PRIVATE_KEY"
|
|
- mkdir -p ~/.ssh
|
|
- chmod 700 ~/.ssh
|
|
- ssh-keyscan $REMOTE_HOST -p $SSH_PORT 2>/dev/null >> ~/.ssh/known_hosts
|
|
- chmod 644 ~/.ssh/known_hosts
|
|
script:
|
|
- ssh $SSH_USER@$REMOTE_HOST -p $SSH_PORT "sudo /etc/discord-twitch-live-notifier/start.sh"
|
|
rules:
|
|
- if: $CI_COMMIT_BRANCH == "main"
|
|
when: manual
|