name: CI on: push: branches: [main] tags: "*" pull_request: jobs: build: strategy: fail-fast: false matrix: include: - os: linux image: ubuntu-latest arch: amd64 env: {} - os: linux image: ubuntu-latest arch: arm64 setup: sudo apt-get update && sudo apt-get install -qq gcc-aarch64-linux-gnu env: CC: aarch64-linux-gnu-gcc CXX: aarch64-linux-gnu-g++ - os: macos image: macos-latest arch: amd64 env: {} - os: macos image: macos-latest arch: arm64 env: {} - os: windows image: windows-latest arch: amd64 env: {} name: Build (${{ matrix.os }}/${{ matrix.arch }}) runs-on: ${{ matrix.image }} env: ${{ matrix.env }} steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: go-version: "1.17" - name: Setup environment run: ${{ matrix.setup }} - run: go mod download - run: make build ls env: GOARCH: ${{ matrix.arch }} OUTPUT: dbmate-${{ matrix.os }}-${{ matrix.arch }} - run: dist/dbmate-${{ matrix.os }}-${{ matrix.arch }} --help if: ${{ matrix.arch == 'amd64' }} - name: Publish binaries uses: softprops/action-gh-release@v1 if: ${{ startsWith(github.ref, 'refs/tags/v') }} with: files: dist/dbmate-* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} docker: name: Docker Test (linux/amd64) runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Check docker environment run: | set -x docker version docker-compose version - name: Build docker image run: | set -x docker-compose build docker-compose run --rm --no-deps dbmate --version - name: Run make build run: docker-compose run --rm --no-deps dev make build ls - name: Run make 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 docker-compose run --rm dev make wait - name: Run make test run: docker-compose run --rm dev make test - name: Publish docker image if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') }} env: SRC_IMAGE: dbmate_release DOCKERHUB_IMAGE: ${{ github.repository }} DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} GHCR_IMAGE: ghcr.io/${{ github.repository }} GHCR_USERNAME: ${{ github.actor }} GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: ci/publish-docker.sh