diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..0d68d73 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,131 @@ +--- + +name: CI + +on: + push: + tags: + - v* + branches: + - master + release: + types: + - published + - released + pull_request: + types: + - opened + - edited + - reopened + - synchronize + - ready_for_review + +jobs: + test: + name: Test + runs-on: ubuntu-latest + timeout-minutes: 5 + strategy: + matrix: + go_version: + - ~1.14 + - ~1.15 + - ^1.16 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go_version }} + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go- + + - name: Run tests + run: go test -coverprofile=./coverage.txt -covermode=atomic -v ./... + + - name: Collect coverage + uses: codecov/codecov-action@v1 + with: + file: ./coverage.txt + + lint: + name: Lint + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Run linter + uses: golangci/golangci-lint-action@v2 + with: + version: v1.37.1 + + docker: + name: Docker + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Get Docker meta + id: docker_meta + uses: crazy-max/ghaction-docker-meta@v1 + with: + images: nineseconds/mtg,ghcr.io/9seconds/mtg + tag-semver: "{{version}},{{major}},{{major}}.{{minor}}" + + - name: Setup QEMU + uses: docker/setup-qemu-action@v1 + + - name: Setup BuildX + uses: docker/setup-buildx-action@v1 + + - name: Setup cache + uses: actions/cache@v2 + with: + path: /tmp/buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Login to GHCR.io + if: github.event_name != 'pull_request' + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GH_PAT }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + pull: true + context: . + platforms: linux/amd64,linux/arm64,linux/386 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + cache-from: type=local,src=/tmp/buildx-cache + cache-to: type=local,dest=/tmp/buildx-cache diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d756c01..0000000 --- a/.travis.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- - -language: go -sudo: false -dist: trusty - -go: - - 1.15.x - - 1.14.x - - 1.13.x - - master - -before_script: make prepare - -script: - - make all - - make lint - -matrix: - allow_failures: - - go: master diff --git a/Dockerfile b/Dockerfile index dfd6b2f..751cb1b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,15 +9,13 @@ RUN set -x \ ca-certificates \ curl \ git \ - make \ - upx + make -COPY . /go/src/github.com/9seconds/mtg/ -WORKDIR /go/src/github.com/9seconds/mtg +COPY . /app +WORKDIR /app RUN set -x \ - && make -j 4 static \ - && upx --ultra-brute -qq ./mtg + && make -j 4 static ############################################################################### @@ -31,4 +29,4 @@ ENV MTG_BIND=0.0.0.0:3128 \ EXPOSE 3128 3129 COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt -COPY --from=build /go/src/github.com/9seconds/mtg/mtg /mtg +COPY --from=build /app/mtg /mtg diff --git a/Makefile b/Makefile index f490128..3f84fba 100644 --- a/Makefile +++ b/Makefile @@ -20,12 +20,13 @@ GOTOOL := env "GOBIN=$(GOBIN)" "PATH=$(ROOT_DIR)/.bin:$(PATH)" all: build .PHONY: build -build: $(APP_NAME) - -$(APP_NAME): +build: @go build $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)" -static-$(APP_NAME): +$(APP_NAME): build + +.PHONY: static +static: @env CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)" $(APP_NAME)-%: GOOS=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f1 -d-) @@ -36,6 +37,7 @@ $(APP_NAME)-%: ccbuilds $(COMMON_BUILD_FLAGS) \ -o "./ccbuilds/$(APP_NAME)-$(GOOS)-$(GOARCH)" +.PHONY: ccbuilds ccbuilds: @rm -rf ./ccbuilds && mkdir -p ./ccbuilds