image: python:3.9-buster stages: - test - bundle - deploy - release variables: API_ROOT_FILE: ./src/aura_engine_api/rest/swagger/swagger.yaml BUNDLED_JSON_FILE: ./public/api.json .install_requirements_node: &install_requirements_node - apt-get --quiet update - apt-get --quiet --yes install nodejs npm - nodejs -v - npm i -g npm@latest .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 cache: paths: - ./node_modules check_style: stage: test before_script: - apt-get --quiet update - apt-get --quiet --yes install codespell make - pip install flake8 script: - make lint - make spelling # test_api: # stage: test # script: # - pip3 install tox # - tox bundle_and_test: stage: bundle before_script: - *install_requirements_node - npm install -g @apidevtools/swagger-cli script: - mkdir public - swagger-cli bundle -t json $API_ROOT_FILE > $BUNDLED_JSON_FILE - swagger-cli validate $BUNDLED_JSON_FILE artifacts: paths: - public expire_in: 2 days rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: always deploy_spec: stage: deploy before_script: - *install_requirements_node - npm install swagger-ui-dist@3.22.1 script: - cp -rp node_modules/swagger-ui-dist/* ./public - 'sed -i "s@.*url.*@url: \"api.json\",@" ./public/index.html' - echo "Deploying AURA Engine 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/engine --ignore-time --parallel=10 --exclude-glob .git* --exclude .git/" - echo "AURA Engine 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/engine-api" services: - docker:dind before_script: # default repo is docker.io (aka docker hub) - docker login -u "$DOCKER_ID" -p "$DOCKER_HUB_AUTH" script: # every commit on main branch should build image as unstable # else it is from a tag (enforced by gitlab-ci rules) # hint: tags are references independent of branches - | if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ] then docker build -t $AURA_IMAGE_NAME:unstable . else docker build -t $AURA_IMAGE_NAME -t $AURA_IMAGE_NAME:$CI_COMMIT_TAG . fi - docker push "$AURA_IMAGE_NAME" --all-tags rules: - *release-rules # every commit on master/main branch should trigger a push to docker-hub as unstable without a release - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH 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: name: 'Release $CI_COMMIT_TAG' description: ./CHANGELOG tag_name: '$CI_COMMIT_TAG' ref: '$CI_COMMIT_TAG'