Skip to content

Commit

Permalink
feat: add gh action (#4)
Browse files Browse the repository at this point in the history
add dev & release build
  • Loading branch information
maxisam authored Sep 12, 2022
1 parent 917ac3f commit d5b61cf
Show file tree
Hide file tree
Showing 10 changed files with 369 additions and 88 deletions.
110 changes: 110 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Dev Build

on:
push:
branches: ["master"]
pull_request:
branches: ["master"]

jobs:
test-build:
runs-on: ubuntu-latest
env:
APP_VERSION: 1.5
MINIO_ROOT_USER: AKIAIOSFODNN7EXAMPLE
MINIO_ROOT_PASSWORD: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
services:
mongodb:
image: mongo:4.2.8
ports:
- 27017:27017
minio:
image: bitnami/minio
ports:
- 9000:9000
- 9001:9001
env:
MINIO_ROOT_USER: ${{ env.MINIO_ROOT_USER }}
MINIO_ROOT_PASSWORD: ${{ env.MINIO_ROOT_PASSWORD }}

steps:
- uses: actions/checkout@v3

- name: Setup MongoDB
run: yarn && node client.js
working-directory: ./test/setup

- name: Setup minio
run: |
sleep 10
sudo curl -s -o /usr/bin/mc https://dl.minio.io/client/mc/release/linux-amd64/mc
sudo chmod u+x /usr/bin/mc
sudo mc config host add local http://127.0.0.1:9000 ${{ env.MINIO_ROOT_USER }} ${{ env.MINIO_ROOT_PASSWORD }} --api S3v4
sudo mc mb local/backup
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Set current date as env variable
run: echo "NOW=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV

- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build Mgob image
uses: docker/build-push-action@v3
with:
build-args: |
BUILD_DATE=${{ env.NOW }}
VCS_REF=${{ github.sha }}
VERSION=${{ env.APP_VERSION }}.${{ github.run_number }}
EN_AWS_CLI=false
EN_AZURE=false
EN_GCLOUD=false
EN_MINIO=true
EN_RCLONE=false
EN_GPG=false
tags: ${{ github.repository }}:${{ env.APP_VERSION }}.${{ github.run_number }}
push: false
load: true
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/mgob:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/mgob:buildcache,mode=max

- name: Run Mgob image
run: >
docker run -d
--name mgob
--network "host"
-v ${{ github.workspace }}/test/gh-actions:/config
${{ github.repository }}:${{ env.APP_VERSION }}.${{ github.run_number }}
- name: Verify mgob backup
run: |
sleep 90
docker logs mgob
curl http://127.0.0.1:8090/version
echo 'S3 integration test'
docker logs mgob 2>&1 | grep 'S3 upload finished'
echo 'Local backup integration test'
docker logs mgob 2>&1 | grep 'Backup finished'
- name: Push mgob image
uses: docker/build-push-action@v3
with:
build-args: |
BUILD_DATE=${{ env.NOW }}
VCS_REF=${{ github.sha }}
VERSION=${{ env.APP_VERSION }}.${{ github.run_number }}
EN_AWS_CLI=false
EN_AZURE=false
EN_GCLOUD=false
EN_MINIO=true
EN_RCLONE=false
EN_GPG=false
tags: ${{ github.repository }}:${{ env.APP_VERSION }}.${{ github.run_number }}
push: true
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/mgob:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/mgob:buildcache,mode=max
56 changes: 0 additions & 56 deletions .github/workflows/docker-image.yml

This file was deleted.

53 changes: 53 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Release

on:
workflow_dispatch:
inputs:
version:
type: string
description: Version
default: 1.5
required: false

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Version
run: |
VER="${{ github.event.inputs.version }}.${{ github.run_number }}"
echo "BUILD_NUMBER=${VER}" >> $GITHUB_ENV
- name: Set current date as env variable
run: echo "NOW=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and push Docker images
uses: docker/build-push-action@v3
with:
labels: ${{ env.BUILD_NUMBER }}
push: ${{ github.event_name != 'pull_request' }}
tags: |
${{ github.repository }}:${{ env.BUILD_NUMBER }}
${{ github.repository }}:latest
build-args: |
BUILD_DATE=${{ env.NOW }}
VCS_REF=${{ github.sha }}
VERSION=${{ env.BUILD_NUMBER }}
EN_AWS_CLI=false
EN_AZURE=false
EN_GCLOUD=false
EN_MINIO=true
EN_RCLONE=false
EN_GPG=false
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/mgob:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/mgob:buildcache,mode=max
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,5 @@ _testmain.go

# intelij
.idea

node_modules
52 changes: 26 additions & 26 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ APP_VERSION?=1.5

# build vars
BUILD_DATE:=$(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
REPOSITORY?=stefanprodan


#run vars
CONFIG:=$$(pwd)/test/config
Expand All @@ -15,93 +15,93 @@ PACKAGES:=$(shell go list ./... | grep -v '/vendor/')
VETARGS:=-asmdecl -atomic -bool -buildtags -copylocks -methods -nilfunc -rangeloops -shift -structtags -unsafeptr

build:
@echo ">>> Building $(REPOSITORY)/mgob:$(APP_VERSION)"
@echo ">>> Building $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)"
@docker build \
--build-arg BUILD_DATE=$(BUILD_DATE) \
--build-arg VCS_REF=$(TRAVIS_COMMIT) \
--build-arg VCS_REF=$(GITHUB_SHA) \
--build-arg VERSION=$(APP_VERSION) \
-t $(REPOSITORY)/mgob:$(APP_VERSION) .
-t $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION) .

aws:
@echo ">>> Building $(REPOSITORY)/mgob:$(APP_VERSION)"
@echo ">>> Building $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)"
@docker build \
--build-arg BUILD_DATE=$(BUILD_DATE) \
--build-arg VCS_REF=$(TRAVIS_COMMIT) \
--build-arg VCS_REF=$(GITHUB_SHA) \
--build-arg VERSION=$(APP_VERSION) \
--build-arg EN_AWS_CLI=true \
--build-arg EN_AZURE=false \
--build-arg EN_GCLOUD=false \
--build-arg EN_MINIO=false \
--build-arg EN_RCLONE=false \
--build-arg EN_GPG=true \
-t $(REPOSITORY)/mgob:$(APP_VERSION)-aws .
-t $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)-aws .

azure:
@echo ">>> Building $(REPOSITORY)/mgob:$(APP_VERSION)"
@echo ">>> Building $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)"
@docker build \
--build-arg BUILD_DATE=$(BUILD_DATE) \
--build-arg VCS_REF=$(TRAVIS_COMMIT) \
--build-arg VCS_REF=$(GITHUB_SHA) \
--build-arg VERSION=$(APP_VERSION) \
--build-arg EN_AWS_CLI=false \
--build-arg EN_AZURE=true \
--build-arg EN_GCLOUD=false \
--build-arg EN_MINIO=false \
--build-arg EN_RCLONE=false \
--build-arg EN_GPG=true \
-t $(REPOSITORY)/mgob:$(APP_VERSION)-azure .
-t $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)-azure .

gcloud:
@echo ">>> Building $(REPOSITORY)/mgob:$(APP_VERSION)"
@echo ">>> Building $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)"
@docker build \
--build-arg BUILD_DATE=$(BUILD_DATE) \
--build-arg VCS_REF=$(TRAVIS_COMMIT) \
--build-arg VCS_REF=$(GITHUB_SHA) \
--build-arg VERSION=$(APP_VERSION) \
--build-arg EN_AWS_CLI=false \
--build-arg EN_AZURE=false \
--build-arg EN_GCLOUD=true \
--build-arg EN_MINIO=false \
--build-arg EN_RCLONE=false \
--build-arg EN_GPG=true \
-t $(REPOSITORY)/mgob:$(APP_VERSION)-gcloud .
-t $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)-gcloud .

travis:
@echo ">>> Building mgob:$(APP_VERSION).$(TRAVIS_BUILD_NUMBER) image"
ci:
@echo ">>> Building mgob:$(APP_VERSION).$(GITHUB_RUN_NUMBER) image"
@docker build \
--build-arg BUILD_DATE=$(BUILD_DATE) \
--build-arg VCS_REF=$(TRAVIS_COMMIT) \
--build-arg VERSION=$(APP_VERSION).$(TRAVIS_BUILD_NUMBER) \
-t $(REPOSITORY)/mgob:$(APP_VERSION).$(TRAVIS_BUILD_NUMBER) .
--build-arg VCS_REF=$(GITHUB_SHA) \
--build-arg VERSION=$(APP_VERSION).$(GITHUB_RUN_NUMBER) \
-t $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION).$(GITHUB_RUN_NUMBER) .

@echo ">>> Starting mgob container"
@docker run -d --net=host --name mgob \
--restart unless-stopped \
-v "$(TRAVIS):/config" \
-v "/tmp/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key:ro" \
-v "/tmp/ssh_host_rsa_key.pub:/etc/ssh/ssh_host_rsa_key.pub:ro" \
$(REPOSITORY)/mgob:$(APP_VERSION).$(TRAVIS_BUILD_NUMBER) \
$(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION).$(GITHUB_RUN_NUMBER) \
-ConfigPath=/config \
-StoragePath=/storage \
-TmpPath=/tmp \
-LogLevel=info

publish:
@echo $(DOCKER_PASS) | docker login -u "$(DOCKER_USER)" --password-stdin
@docker tag $(REPOSITORY)/mgob:$(APP_VERSION).$(TRAVIS_BUILD_NUMBER) $(REPOSITORY)/mgob:edge
@docker push $(REPOSITORY)/mgob:edge
@docker tag $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION).$(GITHUB_RUN_NUMBER) $(GITHUB_REPOSITORY_OWNER)/mgob:edge
@docker push $(GITHUB_REPOSITORY_OWNER)/mgob:edge

release:
@echo $(DOCKER_PASS) | docker login -u "$(DOCKER_USER)" --password-stdin
@docker tag $(REPOSITORY)/mgob:$(APP_VERSION).$(TRAVIS_BUILD_NUMBER) $(REPOSITORY)/mgob:$(APP_VERSION)
@docker tag $(REPOSITORY)/mgob:$(APP_VERSION).$(TRAVIS_BUILD_NUMBER) $(REPOSITORY)/mgob:latest
@docker push $(REPOSITORY)/mgob:$(APP_VERSION)
@docker push $(REPOSITORY)/mgob:latest
@docker tag $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION).$(GITHUB_RUN_NUMBER) $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)
@docker tag $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION).$(GITHUB_RUN_NUMBER) $(GITHUB_REPOSITORY_OWNER)/mgob:latest
@docker push $(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION)
@docker push $(GITHUB_REPOSITORY_OWNER)/mgob:latest

run:
@echo ">>> Starting mgob container"
@docker run -dp 8090:8090 --name mgob-$(APP_VERSION) \
--restart unless-stopped \
-v "$(CONFIG):/config" \
$(REPOSITORY)/mgob:$(APP_VERSION) \
$(GITHUB_REPOSITORY_OWNER)/mgob:$(APP_VERSION) \
-ConfigPath=/config \
-StoragePath=/storage \
-TmpPath=/tmp \
Expand Down
14 changes: 14 additions & 0 deletions test/gh-actions/mongo-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
scheduler:
cron: "* * * * *"
retention: 5
timeout: 60
target:
host: "127.0.0.1"
port: 27017
database: test
s3:
url: "http://127.0.0.1:9000"
bucket: "backup"
accessKey: "AKIAIOSFODNN7EXAMPLE"
secretKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
api: "S3v4"
25 changes: 25 additions & 0 deletions test/setup/client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const { MongoClient } = require("mongodb");
const PORT = process.env.MONGODB_PORT || 27017;
const HOST = process.env.MONGODB_HOST || "localhost";
const DBNAME = process.env.MONGODB_DB_NAME || "test";

async function main() {
const client = new MongoClient(`mongodb://${HOST}:${PORT}/${DBNAME}`, {
useUnifiedTopology: true,
});
try {
await client.connect();
await client.db().collection("test").insertOne({
item: "item",
val: "test",
});
const result = await client.db().collection("test").findOne({});
console.log(JSON.stringify(result));
} catch (e) {
console.error(e);
} finally {
await client.close();
}
}

main().catch(console.error);
Loading

0 comments on commit d5b61cf

Please sign in to comment.