Skip to content

Commit

Permalink
Merge pull request #74 from atc0005/i66-use-docker-based-ghaws
Browse files Browse the repository at this point in the history
Add Docker-based GitHub Actions Workflows
  • Loading branch information
atc0005 authored Aug 23, 2020
2 parents 6ba6f13 + f16c968 commit 7ea942f
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 66 deletions.
112 changes: 54 additions & 58 deletions .github/workflows/lint-and-build-code.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,79 +11,75 @@ name: Validate Codebase
# `synchronized` seems to equate to pushing new commits to a linked branch
# (whether force-pushed or not)
on:
#push:
pull_request:
types: [opened, synchronize]

jobs:
lint_and_build_code:
name: Lint and Build codebase
runs-on: ${{ matrix.os }}
# Default: 360 minutes
lint_code:
name: Lint codebase
runs-on: ubuntu-latest
timeout-minutes: 10
container:
image: index.docker.io/atc0005/go-ci:go-ci-lint-only

steps:
- name: Check out code
uses: actions/[email protected]

- name: Remove repo-provided golangci-lint config file
run: |
# Remove the copy of the config file bundled with the repo/code so
# that the configuration provided by the atc0005/go-ci project is
# used instead
rm -vf .golangci.yml
- name: Run golangci-lint using container-provided config file settings
run: golangci-lint run -v

# This is the very latest stable version of staticcheck provided by the
# atc0005/go-ci container. The version included with golangci-lint often
# lags behind the official stable releases.
- name: Run staticcheck
run: staticcheck $(go list -mod=vendor ./... | grep -v /vendor/)

test_code:
name: Run tests
runs-on: ubuntu-latest
timeout-minutes: 10
strategy:
matrix:
# Supported versions of Go
go-version: [1.13.x, 1.14.x]
container-image: ["go-ci-oldstable", "go-ci-stable", "go-ci-unstable"]

# Supported LTS and latest version of Ubuntu Linux
#os: [ubuntu-16.04, ubuntu-18.04, ubuntu-latest]

# This should be good enough until we learn otherwise
os: [ubuntu-latest]
container:
image: "index.docker.io/atc0005/go-ci:${{ matrix.container-image}}"

steps:
- name: Set up Go
# https://github.com/actions/setup-go
uses: actions/[email protected]
with:
go-version: ${{ matrix.go-version }}
id: go

# This could prove useful if we need to troubleshoot odd results and
# tie them back to a specific version of Go
- name: Print go version
run: |
go version
- name: Check out code into the Go module directory
- name: Check out code
uses: actions/[email protected]

# NOTE: Disabled in favor of top-level `vendor` folder
#
# - name: Get dependencies
# run: |
# go get -v -t -d ./...

# Force tests to run early as it isn't worth doing much else if the
# tests fail to run properly.
# Note: The `vendor` top-level folder appears to be skipped by default.
- name: Run all tests
run: go test -mod=vendor -v ./...

- name: Install Go linting tools
run: |
# add executables installed with go get to PATH
# TODO: this will hopefully be fixed by
# https://github.com/actions/setup-go/issues/14
export PATH=${PATH}:$(go env GOPATH)/bin
make lintinstall
build_code:
name: Build codebase
runs-on: ubuntu-latest
# Default: 360 minutes
timeout-minutes: 10
strategy:
matrix:
container-image: ["go-ci-oldstable", "go-ci-stable", "go-ci-unstable"]

container:
image: "index.docker.io/atc0005/go-ci:${{ matrix.container-image}}"

steps:
- name: Print go version
run: go version

- name: Install Ubuntu packages
if: contains(matrix.os, 'ubuntu')
run: sudo apt update && sudo apt install -y --no-install-recommends make gcc
- name: Check out code
uses: actions/[email protected]

- name: Run Go linting tools using project Makefile
- name: Build using vendored dependencies
run: |
# add executables installed with go get to PATH
# TODO: this will hopefully be fixed by
# https://github.com/actions/setup-go/issues/14
export PATH=${PATH}:$(go env GOPATH)/bin
make linting
- name: Build with (mostly) default options
# Note: We use the `-mod=vendor` flag to explicitly request that our
# top-level vendor folder be used instead of fetching remote packages
run: go build -v -mod=vendor ./cmd/check_imap_mailbox

- name: Build using project Makefile
run: make all
go build -v -mod=vendor ./cmd/check_imap_mailbox
75 changes: 75 additions & 0 deletions .github/workflows/lint-and-build-using-make.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Copyright 2020 Adam Chalkley
#
# https://github.com/atc0005/check-mail
#
# Licensed under the MIT License. See LICENSE file in the project root for
# full license information.

name: Lint and Build using Makefile

# Run builds for Pull Requests (new, updated)
# `synchronized` seems to equate to pushing new commits to a linked branch
# (whether force-pushed or not)
on:
#push:
pull_request:
types: [opened, synchronize]

jobs:
lint_code_with_makefile:
name: Lint codebase using Makefile
runs-on: ubuntu-latest
# Default: 360 minutes
timeout-minutes: 10
container:
image: "index.docker.io/golang:latest"

steps:
- name: Print go version
run: go version

- name: Check out code into the Go module directory
uses: actions/[email protected]

# bsdmainutils provides "column" which is used by the Makefile
- name: Install Ubuntu packages
run: apt-get update && apt-get install -y --no-install-recommends make gcc bsdmainutils

- name: Install Go linting tools
run: make lintinstall

# NOTE: We are intentionally *not* removing the repo-provided config
# file (per GH-281) as this workflow is intended to emulate running the
# Makefile via a local dev environment.
#
# - name: Remove repo-provided golangci-lint config file
# run: |
# # Remove the copy of the config file bundled with the repo/code so
# # that the configuration provided by the atc0005/go-ci project is
# # used instead
# rm -vf .golangci.yml

- name: Run Go linting tools using project Makefile
run: make linting

build_code_with_makefile:
name: Build codebase using Makefile
runs-on: ubuntu-latest
# Default: 360 minutes
timeout-minutes: 10
container:
image: "index.docker.io/golang:latest"

steps:
- name: Print go version
run: go version

- name: Check out code into the Go module directory
uses: actions/[email protected]

# bsdmainutils provides "column" which is used by the Makefile
- name: Install Ubuntu packages
run: apt-get update && apt-get install -y --no-install-recommends make gcc bsdmainutils

- name: Build using project Makefile
run: make all
39 changes: 39 additions & 0 deletions .github/workflows/lint-and-test-only.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright 2020 Adam Chalkley
#
# https://github.com/atc0005/check-mail
#
# Licensed under the MIT License. See LICENSE file in the project root for
# full license information.

name: Quick Validation

# Run builds for Pull Requests (new, updated)
# `synchronized` seems to equate to pushing new commits to a linked branch
# (whether force-pushed or not)
on:
push:

jobs:
lint_and_test_code:
name: Lint and test using latest stable container
runs-on: ubuntu-latest
timeout-minutes: 10
container:
image: index.docker.io/atc0005/go-ci:go-ci-lint-only

steps:
- name: Check out code
uses: actions/[email protected]

- name: Remove repo-provided golangci-lint config file
run: |
# Remove the copy of the config file bundled with the repo/code so
# that the configuration provided by the atc0005/go-ci project is
# used instead
rm -vf .golangci.yml
- name: Run golangci-lint using container-provided config file settings
run: golangci-lint run -v

- name: Run all tests
run: go test -mod=vendor -v ./...
2 changes: 0 additions & 2 deletions .github/workflows/lint-docs.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#!/bin/bash

# Copyright 2020 Adam Chalkley
#
# https://github.com/atc0005/check-mail
Expand Down
10 changes: 4 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
# https://gist.github.com/subfuzion/0bd969d08fe0d8b5cc4b23c795854a13
# https://stackoverflow.com/questions/10858261/abort-makefile-if-variable-not-set
# https://stackoverflow.com/questions/38801796/makefile-set-if-variable-is-empty
# https://github.com/golangci/golangci-lint#install
# https://github.com/golangci/golangci-lint/releases/latest

SHELL = /bin/bash

Expand All @@ -38,10 +40,6 @@ OUTPUTDIR = release_assets
# https://gist.github.com/TheHippo/7e4d9ec4b7ed4c0d7a39839e6800cc16
VERSION = $(shell git describe --always --long --dirty)

# https://github.com/golangci/golangci-lint#install
# https://github.com/golangci/golangci-lint/releases/latest
GOLANGCI_LINT_VERSION = v1.27.0

# The default `go build` process embeds debugging information. Building
# without that debugging information reduces the binary size by around 28%.
BUILDCMD = go build -mod=vendor -a -ldflags="-s -w -X $(VERSION_VAR_PKG).version=$(VERSION)"
Expand Down Expand Up @@ -74,8 +72,8 @@ lintinstall:
@echo "Explicitly enabling Go modules mode per command"
(cd; GO111MODULE="on" go get honnef.co/go/tools/cmd/staticcheck)

@echo Installing golangci-lint ${GOLANGCI_LINT_VERSION} per official binary installation docs ...
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin ${GOLANGCI_LINT_VERSION}
@echo Installing latest stable golangci-lint version per official installation script ...
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin
golangci-lint --version

@echo "Finished updating linting tools"
Expand Down

0 comments on commit 7ea942f

Please sign in to comment.