diff --git a/.bumpversion.cfg b/.bumpversion.cfg new file mode 100644 index 0000000..31c6701 --- /dev/null +++ b/.bumpversion.cfg @@ -0,0 +1,14 @@ + [bumpversion] +current_version = 1.0.0 +commit = True +tag = True +tag_name = {new_version} +parse = (?P\d+)\.(?P\d+)\.(?P\d+) +serialize = {major}.{minor}.{patch} +message = [skip ci] Bump version: {current_version} → {new_version} + +[bumpversion:file:VERSION] + +[bumpversion:file:README.md] + +[bumpversion:file:src/main.go] diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..185714a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.git/ +.git* +docs/ +.bumpversion.cfg +.editorconfig +.drone.yml +Dockerfile +Makefile +*.md +*.txt diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..f274042 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,145 @@ +--- +kind: pipeline +type: docker +name: backend-service + +platform: + os: linux + arch: amd64 + +steps: + - name: "[branch] bump version" + image: registry.halfakop.ru/golang/bumpversion:0.1.3 + environment: + GIT_USERNAME: + from_secret: GIT_USERNAME + GIT_EMAIL: + from_secret: GIT_EMAIL + entrypoint: ["/bumpversion"] + command: ["--no-commit", "--no-tag", "patch"] + load: false # do not use /bin/sh -c here + when: + branch: + - task-* + event: + - push + + - name: "[master] bump version" + image: registry.halfakop.ru/golang/bumpversion:0.1.3 + environment: + GIT_USERNAME: + from_secret: GIT_USERNAME + GIT_EMAIL: + from_secret: GIT_EMAIL + entrypoint: ["/bumpversion"] + command: ["patch"] + load: false # do not use /bin/sh -c here + when: + branch: + - master + event: + - push + + - name: "[master] build" + image: plugins/docker + volumes: + - name: docker-sock + path: /var/run/docker.sock + environment: + DOCKER_USERNAME: + from_secret: DOCKER_USERNAME + DOCKER_PASSWORD: + from_secret: DOCKER_PASSWORD + commands: + - apk add make git bash + - make login build DOCKER_OPTS="--network devtools" + when: + branch: + - master + status: + - success + + - name: "[master] tagging" + image: alpine/git + commands: + - git push origin master + - git push origin master --tags + when: + branch: + - master + status: + - success + + - name: "[master] push" + image: plugins/docker + volumes: + - name: docker-sock + path: /var/run/docker.sock + environment: + DOCKER_USERNAME: + from_secret: DOCKER_USERNAME + DOCKER_PASSWORD: + from_secret: DOCKER_PASSWORD + commands: + - apk add make git bash + - make login push DOCKER_OPTS="--network devtools" + when: + branch: + - master + status: + - success + + - name: "[release] get deployment repo" + image: plugins/ansible:1 + commands: + - git clone https://git.halfakop.ru/3dthis.ru/deployment.git + when: + branch: + - release + event: + - push + + - name: "[release] check deployment playbook" + image: plugins/ansible:1 + environment: + SERVICE_NAME: backend + settings: + playbook: deployment/deployment.yml + inventory: deployment/inventory_service.yml + syntax_check: true + when: + branch: + - release + status: + - success + + - name: "[release] deploy service" + image: plugins/ansible:1 + environment: + SERVICE_NAME: backend + DATABASE_URL: + from_secret: DATABASE_URL + settings: + playbook: deployment/deployment.yml + inventory: deployment/inventory_service.yml + private_key: + from_secret: SSHKEY + verbose: 1 # 0 .. 4 + when: + branch: + - release + status: + - success + +trigger: + event: + exclude: + - tag + +volumes: + - name: docker-sock + host: + path: /var/run/docker.sock + +image_pull_secrets: + - dockerconfigjson diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9cdf9de --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM golang:1.24.9-alpine AS builder + +WORKDIR /app +COPY go.mod go.sum ./ +RUN go mod download +COPY . . +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o service ./src + +FROM gcr.io/distroless/static + +WORKDIR / +COPY --from=builder /app/service . +ENTRYPOINT [ "/service"] diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.0.0