diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 82e6c7d..5f0fa0c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,13 +3,27 @@ stages: - test - publish -services: - - docker:19.03.12-dind +.img: &img + image: "domaindrivenarchitecture/ddadevops-dind:4.7.2" + services: + - docker:dind + before_script: + - export RELEASE_ARTIFACT_TOKEN=$MEISSA_REPO_BUERO_RW + - export IMAGE_DOCKERHUB_USER=$DOCKERHUB_USER + - export IMAGE_DOCKERHUB_PASSWORD=$DOCKERHUB_PASSWORD + - export IMAGE_TAG=$CI_COMMIT_TAG -build: - image: domaindrivenarchitecture/devops-build:latest - stage: build +.tag_only: &tag_only rules: - - if: '$CI_COMMIT_TAG != null' + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + when: never + - if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/' + +dda-backup-image-publish: + <<: *img + <<: *tag_only + stage: image script: - - cd infrastructure/docker && pyb image test publish + - cd infrastructure/docker && pyb image publish + + diff --git a/build.py b/build.py new file mode 100644 index 0000000..f696b00 --- /dev/null +++ b/build.py @@ -0,0 +1,74 @@ +from os import environ +from subprocess import run +from pybuilder.core import init, task +from ddadevops import * + +default_task = "dev" + +name = "dda-backup" +MODULE = "not-used" +PROJECT_ROOT_PATH = "." + + +@init +def initialize(project): + input = { + "name": name, + "module": MODULE, + "stage": "notused", + "project_root_path": PROJECT_ROOT_PATH, + "build_types": [], + "mixin_types": ["RELEASE"], + "release_primary_build_file": "build.py", + "release_secondary_build_files": [ + "infrastructure/docker/build.py" + ], + "release_artifact_server_url": "https://repo.prod.meissa.de", + "release_organisation": "meissa", + "release_repository_name": name, + "release_artifacts": [], + } + + build = ReleaseMixin(project, input) + build.initialize_build_dir() + +@task +def patch(project): + build = get_devops_build(project) + build.update_release_type("PATCH") + release(project) + + +@task +def minor(project): + build = get_devops_build(project) + build.update_release_type("MINOR") + release(project) + + +@task +def major(project): + build = get_devops_build(project) + build.update_release_type("MAJOR") + release(project) + + +@task +def prepare(project): + build = get_devops_build(project) + build.prepare_release() + + +@task +def tag(project): + build = get_devops_build(project) + build.tag_bump_and_push_release() + +@task +def publish_artifacts(project): + build = get_devops_build(project) + build.publish_artifacts() + +def release(project): + prepare(project) + tag(project) diff --git a/development-version.sh b/development-version.sh deleted file mode 100755 index 3b0c926..0000000 --- a/development-version.sh +++ /dev/null @@ -1 +0,0 @@ -VERSION=1.0.8 $@ diff --git a/doc/Releasing.md b/doc/Releasing.md deleted file mode 100644 index ac96134..0000000 --- a/doc/Releasing.md +++ /dev/null @@ -1,11 +0,0 @@ -# stable release (should be done from master) - -1. Test if image build, image test and image publish is working: -``` -cd infrastructure/docker && pyb image test publish -``` - -2. If image, test & publish is working, you can run the release script in the project root: -``` -./release.sh -``` \ No newline at end of file diff --git a/infrastructure/docker/build.py b/infrastructure/docker/build.py index 25d175c..7b21959 100644 --- a/infrastructure/docker/build.py +++ b/infrastructure/docker/build.py @@ -1,32 +1,35 @@ from os import environ +from datetime import datetime from pybuilder.core import task, init from ddadevops import * import logging name = 'dda-backup' -MODULE = 'docker' +MODULE = 'NOT_SET' PROJECT_ROOT_PATH = '../..' +version = "1.0.9-SNAPSHOT" -class MyBuild(DevopsDockerBuild): - pass - @init def initialize(project): - project.build_depends_on('ddadevops>=0.12.4') - stage = 'notused' - dockerhub_user = environ.get('DOCKERHUB_USER') - if not dockerhub_user: - dockerhub_user = gopass_field_from_path('meissa/web/docker.com', 'login') - dockerhub_password = environ.get('DOCKERHUB_PASSWORD') - if not dockerhub_password: - dockerhub_password = gopass_password_from_path('meissa/web/docker.com') - tag = environ.get('CI_COMMIT_TAG') - if not tag: - tag = get_tag_from_latest_commit() - config = create_devops_docker_build_config( - stage, PROJECT_ROOT_PATH, MODULE, dockerhub_user, dockerhub_password, docker_publish_tag=tag) - build = MyBuild(project, config) + image_tag = version + if "dev" in image_tag: + image_tag += datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + + input = { + "name": name, + "module": MODULE, + "stage": "notused", + "project_root_path": PROJECT_ROOT_PATH, + "build_types": ["IMAGE"], + "mixin_types": [], + "image_naming": "NAME_ONLY", + "image_tag": f"{image_tag}", + } + + project.build_depends_on("ddadevops>=4.7.0") + + build = DevopsImageBuild(project, input) build.initialize_build_dir() @@ -40,13 +43,9 @@ def drun(project): build = get_devops_build(project) build.drun() + @task def publish(project): build = get_devops_build(project) build.dockerhub_login() build.dockerhub_publish() - -@task -def test(project): - build = get_devops_build(project) - build.test() diff --git a/release.sh b/release.sh deleted file mode 100755 index ddcd39c..0000000 --- a/release.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -source development-version.sh - -if [ -z "$VERSION" ] -then - echo "Error: VERSION needs to be set!" -else - git pull - echo "Release version: $VERSION" - - while IFS='.' read -ra NUM; do - echo "VERSION=${NUM[0]}.${NUM[1]}.$((NUM[2]+1)) \$@" > development-version.sh - done <<< "$VERSION" - echo "Version bumped in file 'development-version.sh'" - - git add -A && git commit -m "Version ${VERSION}" - git tag -a ${VERSION} -m "Release ${VERSION}" - git push --follow-tags -fi