-
Ernesto Rico Schmidt authoredErnesto Rico Schmidt authored
.gitlab-ci.yml 3.74 KiB
.release-rules: &release-rules
# rule to run job on a tag-reference which has the form number.number.number (semantic versioning)
# or number.number.number-text (semantic versioning + release-name)
# and where a Dockerfile exists
- if: $CI_COMMIT_TAG =~ /^\d+[.]\d+[.]\d+$/ || $CI_COMMIT_TAG =~ /^\d+[.]\d+[.]\d+[-]\S+$/
exists:
- Dockerfile
stages:
- build
- deploy
- release
build-openapi-scheme:
stage: build
image: python:3.11-slim
variables:
OPENAPI_JSON: ./public/api.json
before_script:
- apt-get update
- apt-get install -y gcc libldap2-dev libsasl2-dev libmagic-dev
- pip install --upgrade pip
- pip install poetry==1.8.1
- poetry install --without dev,test --no-root
script:
- mkdir public
- mkdir logs
- poetry run python manage.py spectacular --validate --lang en --format openapi-json --file $OPENAPI_JSON
artifacts:
paths:
- $OPENAPI_JSON
deploy_spec:
stage: deploy
image: node:20-alpine
needs:
- build-openapi-scheme
before_script:
- apk update
- apk add nodejs npm lftp
- node -v
- npm i -g npm@latest
- npm install swagger-ui-dist@3.52.5
script:
- cp -rp node_modules/swagger-ui-dist/* ./public
- 'sed -i "s@.*url.*@url: \"api.json\",@" ./public/index.html'
- echo "Deploying AURA Steering API Spec..."
- lftp -c "set ftp:ssl-allow no; open -u $FTP_AURA_RADIO_USER,$FTP_AURA_RADIO_PWD $FTP_AURA_RADIO_HOST; mirror -Rnev ./public/ ./api.aura.radio/steering --ignore-time --parallel=10 --exclude-glob .git* --exclude .git/"
- echo "AURA Steering API Spec successfully deployed."
artifacts:
paths:
- public
expire_in: 2 days
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: always
docker-push:
# Use the official docker image.
image: docker:latest
stage: release
variables:
# the name of the image without version
AURA_IMAGE_NAME: "autoradio/steering"
services:
- docker:dind
script:
# every commit on main branch builds and pushes the image with labels "main" and "main-{hash}"
# elseif its a protected branch build and push to gitlab registry
# else it is from a tag (enforced by gitlab-ci rules)
# hint: tags are references independent of branches
# hint: feature branches must begin with "feat"
- |
if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]
then docker login -u "$DOCKER_ID" -p "$DOCKER_HUB_AUTH"
docker build -t $AURA_IMAGE_NAME:main -t $AURA_IMAGE_NAME:main-$CI_COMMIT_SHORT_SHA .
docker push --all-tags $AURA_IMAGE_NAME
elif [ "$CI_COMMIT_REF_PROTECTED" = "true" ] && [ "$CI_COMMIT_BRANCH" != "$CI_DEFAULT_BRANCH" ]
then docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
docker build -t $AURA_IMAGE_NAME -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
else
docker login -u "$DOCKER_ID" -p "$DOCKER_HUB_AUTH"
docker build -t $AURA_IMAGE_NAME -t $AURA_IMAGE_NAME:$CI_COMMIT_TAG .
docker push $AURA_IMAGE_NAME:$CI_COMMIT_TAG
fi
rules:
- *release-rules
# every commit on master/main or feature branch should trigger a push
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_REF_PROTECTED =~ "true"
exists:
- Dockerfile
release_job:
stage: release
needs:
- docker-push
image: registry.gitlab.com/gitlab-org/release-cli:latest
rules: *release-rules
script:
- echo "this will be a release when there is a tag, but tags should be protected to be only createable by maintainers."
release:
# TODO: automated release notes
name: 'Release $CI_COMMIT_TAG'
description: ./CHANGELOG.md
tag_name: '$CI_COMMIT_TAG'
ref: '$CI_COMMIT_TAG'