From e44e09eb678bf10388cd5d3f08963d642ffbf5ee Mon Sep 17 00:00:00 2001 From: Adrian Macneil Date: Mon, 2 Nov 2020 20:22:59 +1300 Subject: [PATCH] Migrate CI to GitHub Actions (#171) --- .dockerignore | 1 + .github/workflows/build.yml | 63 +++++++++++++++++++++++++++++++++++++ .gitignore | 1 + .travis.yml | 27 ---------------- Dockerfile | 24 +++++++------- Makefile | 8 ++--- docker-compose.override.yml | 7 ----- docker-compose.yml | 11 +++++-- 8 files changed, 91 insertions(+), 51 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/build.yml delete mode 100644 .travis.yml delete mode 100644 docker-compose.override.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6b8710a --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.git diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..34eb6da --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,63 @@ +name: CI + +on: + push: + branches: [ master ] + tags: 'v*' + pull_request: + branches: [ master ] + +jobs: + build: + name: Build & Test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Environment + run: | + set -x + docker version + docker-compose version + + - name: Cache + uses: actions/cache@v2 + with: + key: cache + path: .cache + + - name: Build docker image + run: | + set -x + docker-compose build + docker-compose run --rm --no-deps dbmate --version + + - name: Build binaries + run: | + set -x + docker-compose run --rm --no-deps dev make build-all + dist/dbmate-linux-amd64 --version + + - name: Lint + run: docker-compose run --rm --no-deps dev make lint + + - name: Start test dependencies + run: | + set -x + docker-compose pull --quiet + docker-compose up --detach + + - name: Run tests + run: | + set -x + docker-compose run --rm dev make wait + docker-compose run --rm dev make test + + - name: Release + uses: softprops/action-gh-release@v1 + if: ${{ startsWith(github.ref, 'refs/tags/v') }} + with: + files: dist/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index c290c8c..44a09fe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store .env +/.cache /db /dbmate /dist diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0876b02..0000000 --- a/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -sudo: required -services: - - docker -install: - - docker version - - docker-compose version - - rm docker-compose.override.yml - - docker-compose pull - - docker-compose build - - docker-compose up -d -script: - - docker-compose run --rm --volume "$PWD/dist:/src/dist" dbmate make build-all - - docker-compose run --rm dbmate make lint - - docker-compose run --rm dbmate make wait - - docker-compose run --rm dbmate make test - - docker build -t dbmate . - - docker run --rm dbmate --help -deploy: - provider: releases - api_key: - secure: LuDKEwGYaJWqYe0Ym6qoxHAbZx1kDiTigYcycribnmugGVDvRpZp5MJuQivTD1eZ4sl58UO3NX6jyf8pfx814m6G+3gjWaQ56OtJIKF2OwtxnwvMZNaVz63hSi8n1jCdbGTHlOqDAUQbjGFGrmsI5wAGsUM16yRktCAEn5APHxNHMnQcGTIe3Wcp+G4Fp+iRQ80Ro6BLPo2ys+WWDxz6Wahv3U6CJWtkQMAuZyZTSXL1Pl6kqlZyGKhUbPHvq1KU0wWccvwT5P6KVo314aF5Skw0LJ3qciwUTnc7dsHCkvJKF5/Nev3/KWWVKR3DBh98gS2hDNjpSozYAO/e9QiIjaidqYYifoEFIY7Jx0DArJwaw3PLnRMKGKMyww2CaFopxr5HT1s18EGMytRbduASUieeF+7pFs29Bouc8xC0OnKZdlXRewAYFjWzWdCiXQVU18q3DggFK6fb1HWLmy6NX2RmxDODSv3B8P3DzmsdwR0vc64IxmnS+zTdjUwE0+FuxOEmWl/iqYi+nXKXOj0domFudfaBxGT2f5ThBw5Ns9FXKBGxyRSD8wf8+sDbUIUxUdZw1kCttNM/JSbbz9ErLV/Ik23BWBPkjDxo4DpLgqVMg8LHPbmhCuKHvckhoCBpORuvX3PTzzdCsJfiYJCr6nMt/deAp/B/O2O/3/2nFYI= - file_glob: true - file: dist/* - skip_cleanup: true - on: - tags: true - repo: amacneil/dbmate diff --git a/Dockerfile b/Dockerfile index 4109fd2..0ee8269 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ -# build image -FROM techknowlogick/xgo:go-1.15.x as build +# development image +FROM techknowlogick/xgo:go-1.15.x as dev WORKDIR /src +ENV GOCACHE /src/.cache/go-build # enable cgo to build sqlite ENV CGO_ENABLED 1 @@ -24,18 +25,19 @@ RUN curl -fsSL -o /tmp/lint-install.sh https://raw.githubusercontent.com/golangc COPY go.* ./ RUN go mod download -# build -COPY . ./ -RUN make build - ENTRYPOINT [] CMD ["/bin/bash"] -# runtime image -FROM alpine +# build stage +FROM dev as build +COPY . ./ +RUN make build + +# release stage +FROM alpine as release RUN apk add --no-cache \ - mariadb-client \ - postgresql-client \ - sqlite + mariadb-client \ + postgresql-client \ + sqlite COPY --from=build /src/dist/dbmate-linux-amd64 /usr/local/bin/dbmate ENTRYPOINT ["dbmate"] diff --git a/Makefile b/Makefile index 07a6005..ef9dfc0 100644 --- a/Makefile +++ b/Makefile @@ -52,8 +52,8 @@ build-all: clean build-linux-amd64 .PHONY: docker-make docker-make: docker-compose build - docker-compose run --rm dbmate make + docker-compose run --rm dev make -.PHONY: docker-bash -docker-bash: - -docker-compose run --rm dbmate bash +.PHONY: docker-sh +docker-sh: + -docker-compose run --rm dev diff --git a/docker-compose.override.yml b/docker-compose.override.yml deleted file mode 100644 index 82661d4..0000000 --- a/docker-compose.override.yml +++ /dev/null @@ -1,7 +0,0 @@ -# this file is used to mount the current directory as a volume -# we remove it in CI to use files inside the container only -version: '2.3' -services: - dbmate: - volumes: - - .:/src diff --git a/docker-compose.yml b/docker-compose.yml index 57b9996..09d8331 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,11 @@ version: '2.3' services: - dbmate: + dev: build: context: . - target: build + target: dev + volumes: + - .:/src depends_on: - mysql - postgres @@ -13,6 +15,11 @@ services: POSTGRESQL_URL: postgres://postgres:postgres@postgres/dbmate?sslmode=disable CLICKHOUSE_URL: clickhouse://clickhouse:9000?database=dbmate + dbmate: + build: + context: . + target: release + mysql: image: mysql:5.7 environment: