# Crafty Controller 4.0 - Lint & Build Pipes # [Maintainer: Zedifus(https://gitlab.com/Zedifus)] ################################################### # yamllint disable rule:line-length --- stages: - lint - prod-deployment - dev-deployment variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" yamllint: stage: lint image: registry.gitlab.com/pipeline-components/yamllint:latest tags: - "docker" rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: "$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS" when: never script: - yamllint . jsonlint: stage: lint image: registry.gitlab.com/pipeline-components/jsonlint:latest tags: - "docker" rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: "$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS" when: never script: - | find . -not -path './.git/*' -name '*.json' -type f -print0 | parallel --will-cite -k -0 -n1 jsonlint -q black: stage: lint image: registry.gitlab.com/pipeline-components/black:latest tags: - "docker" rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: "$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS" when: never script: - black --check --verbose -- . pylint: stage: lint image: registry.gitlab.com/pipeline-components/pylint:latest tags: - "docker" rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: "$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS" when: never # before_script: # - mkdir -p public/badges public/lint # - echo undefined > public/badges/$CI_JOB_NAME.score script: # - pylint --exit-zero --output-format=text $(find -type f -name "*.py" ! -path "**/.venv/**" ! -path "**/app/migrations/**") | tee /tmp/pylint.txt # - sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' /tmp/pylint.txt > public/badges/$CI_JOB_NAME.score - pylint --exit-zero --output-format=pylint_gitlab.GitlabCodeClimateReporter $(find -type f -name "*.py" ! -path "**/.venv/**" ! -path "**/app/migrations/**") > codeclimate.json # after_script: # - anybadge --overwrite --label $CI_JOB_NAME --value=$(cat public/badges/$CI_JOB_NAME.score) --file=public/badges/$CI_JOB_NAME.svg 4=red 6=orange 8=yellow 10=green # - | # echo "Your score is: $(cat public/badges/$CI_JOB_NAME.score)" # Removed lint badge generation until public release artifacts: paths: - public reports: codequality: codeclimate.json when: always docker-build-dev: image: docker:latest services: - name: docker:dind stage: dev-deployment tags: - "docker_priv" rules: - if: $CI_COMMIT_BRANCH == 'dev' environment: name: development before_script: - | apk --no-cache add jq MAJOR=$(cat app/config/version.json | jq '.major' ) MINOR=$(cat app/config/version.json | jq '.minor' ) SUB=$(cat app/config/version.json | jq '.sub' ) META=$(cat app/config/version.json | jq -r '.meta' ) - | apk --no-cache add curl latest_tag=$(curl -s https://api.github.com/repos/docker/buildx/releases/latest | sed -Ene '/^ *"tag_name": *"(v.+)",$/s//\1/p') echo "Using buildx version $latest_tag" curl -sSLo docker-buildx "https://github.com/docker/buildx/releases/download/$latest_tag/buildx-$latest_tag.linux-amd64" chmod a+x docker-buildx mkdir -p ~/.docker/cli-plugins mv docker-buildx ~/.docker/cli-plugins/docker-buildx docker version - docker run --rm --privileged aptman/qus -- -r - docker run --rm --privileged aptman/qus -s -- -p aarch64 x86_64 - echo $CI_BUILD_TOKEN | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY script: - | tag=":$CI_COMMIT_REF_SLUG" VERSION="${MAJOR}.${MINOR}.${SUB}-${META}" - | echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag" echo "Crafty Version: $VERSION" - docker context create tls-environment - docker buildx create --name zedBuilder --use tls-environment - docker buildx build --cache-from type=registry,ref="$CI_REGISTRY_IMAGE${tag}" --build-arg BUILDKIT_INLINE_CACHE=1 --build-arg "BUILD_DATE=$(date +"%Y-%m-%dT%H:%M:%SZ")" --build-arg "BUILD_REF=${CI_COMMIT_SHA}" --build-arg "CRAFTY_VER=${VERSION}" --tag "$CI_REGISTRY_IMAGE${tag}" --platform linux/arm64/v8,linux/amd64 --push . after_script: - | docker buildx rm zedBuilder && echo "Successfully Stopped builder instance" || echo "Failed to stop builder instance." docker context rm tls-environment || true echo "Please review multi-arch manifests are present:" docker buildx imagetools inspect "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" docker-build-prod: image: docker:latest services: - name: docker:dind stage: prod-deployment tags: - "docker_priv" rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH environment: name: production before_script: - | apk --no-cache add jq MAJOR=$(cat app/config/version.json | jq '.major' ) MINOR=$(cat app/config/version.json | jq '.minor' ) SUB=$(cat app/config/version.json | jq '.sub' ) META=$(cat app/config/version.json | jq -r '.meta' ) - | apk --no-cache add curl latest_tag=$(curl -s https://api.github.com/repos/docker/buildx/releases/latest | sed -Ene '/^ *"tag_name": *"(v.+)",$/s//\1/p') echo "Using buildx version $latest_tag" curl -sSLo docker-buildx "https://github.com/docker/buildx/releases/download/$latest_tag/buildx-$latest_tag.linux-amd64" chmod a+x docker-buildx mkdir -p ~/.docker/cli-plugins mv docker-buildx ~/.docker/cli-plugins/docker-buildx docker version - docker run --rm --privileged aptman/qus -- -r - docker run --rm --privileged aptman/qus -s -- -p aarch64 x86_64 - echo $CI_BUILD_TOKEN | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY script: - | tag="" VERSION="${MAJOR}.${MINOR}.${SUB}-${META}" - | echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag" echo "Crafty Version: $VERSION" - docker context create tls-environment - docker buildx create --name zedBuilder --use tls-environment - docker buildx build --cache-from type=registry,ref="$CI_REGISTRY_IMAGE${tag}" --build-arg BUILDKIT_INLINE_CACHE=1 --build-arg "BUILD_DATE=$(date +"%Y-%m-%dT%H:%M:%SZ")" --build-arg "BUILD_REF=${CI_COMMIT_SHA}" --build-arg "CRAFTY_VER=${VERSION}" --tag "$CI_REGISTRY_IMAGE${tag}" --platform linux/arm64/v8,linux/amd64 --push . after_script: - | docker buildx rm zedBuilder && echo "Successfully Stopped builder instance" || echo "Failed to stop builder instance." docker context rm tls-environment || true echo "Please review multi-arch manifests are present:" docker buildx imagetools inspect "$CI_REGISTRY_IMAGE${tag}" win-dev-build: stage: dev-deployment tags: - win64 cache: paths: - .venv/ rules: - if: "$CI_COMMIT_BRANCH == 'dev'" environment: name: development script: - | $ErrorActionPreference = "Stop" py -m venv .venv .venv\Scripts\activate.ps1 pip install pyinstaller pip install -r requirements.txt - pyinstaller -F main.py --distpath . --icon app\frontend\static\assets\images\Crafty_4-0_Logo_square.ico --name "crafty_commander" --paths .venv\Lib\site-packages --hidden-import cryptography --hidden-import cffi --hidden-import apscheduler --collect-all tzlocal --collect-all tzdata --collect-all pytz --collect-all six # Download latest: # | https://gitlab.com/crafty-controller/crafty-commander/-/jobs/artifacts/dev/download?job=win-dev-build artifacts: name: "crafty-${CI_RUNNER_TAGS}-${CI_COMMIT_BRANCH}_${CI_COMMIT_SHORT_SHA}" paths: - app\ - .\crafty_commander.exe exclude: - app\classes\**\* win-prod-build: stage: prod-deployment tags: - win64 cache: paths: - .venv/ rules: - if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH" environment: name: production script: - | $ErrorActionPreference = "Stop" py -m venv .venv .venv\Scripts\activate.ps1 pip install pyinstaller pip install -r requirements.txt - pyinstaller -F main.py --distpath . --icon app\frontend\static\assets\images\Crafty_4-0_Logo_square.ico --name "crafty_commander" --paths .venv\Lib\site-packages --hidden-import cryptography --hidden-import cffi --hidden-import apscheduler --collect-all tzlocal --collect-all tzdata --collect-all pytz --collect-all six # Download latest: # | https://gitlab.com/crafty-controller/crafty-commander/-/jobs/artifacts/master/download?job=win-prod-build artifacts: name: "crafty-${CI_RUNNER_TAGS}-${CI_COMMIT_BRANCH}_${CI_COMMIT_SHORT_SHA}" paths: - app\ - .\crafty_commander.exe exclude: - app\classes\**\*