chore: use GitHub Action. (#1319)

This commit is contained in:
Ludovic Fernandez 2020-12-09 20:52:21 +01:00 committed by GitHub
parent 136f159d53
commit d9248c9d4f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 190 additions and 126 deletions

45
.github/workflows/go-cross.yml vendored Normal file
View file

@ -0,0 +1,45 @@
name: Go Matrix
on: [push, pull_request]
jobs:
cross:
name: Go
runs-on: ${{ matrix.os }}
env:
CGO_ENABLED: 0
strategy:
matrix:
go-version: [ 1.14, 1.15, 1.x ]
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
# https://github.com/marketplace/actions/setup-go-environment
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
# https://github.com/marketplace/actions/checkout
- name: Checkout code
uses: actions/checkout@v2
# https://github.com/marketplace/actions/cache
- name: Cache Go modules
uses: actions/cache@v2
with:
path: |
~/go/pkg/mod # Module download cache
~/.cache/go-build # Build cache (Linux)
~/Library/Caches/go-build # Build cache (Mac)
'%LocalAppData%\go-build' # Build cache (Windows)
key: ${{ runner.os }}-${{ matrix.go-version }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-${{ matrix.go-version }}-go-
- name: Test
run: go test -v -cover ./...
- name: Build
run: go build -v -ldflags "-s -w" -trimpath -o ./dist/lego ./cmd/lego/

127
.github/workflows/main.yml vendored Normal file
View file

@ -0,0 +1,127 @@
name: Main
on:
push:
branches:
- master
tags:
- v*
pull_request:
jobs:
main:
name: Main Process
runs-on: ubuntu-latest
env:
GO_VERSION: 1.15
GOLANGCI_LINT_VERSION: v1.33.0
HUGO_VERSION: 0.54.0
SEIHON_VERSION: v0.5.1
CGO_ENABLED: 0
LEGO_E2E_TESTS: CI
MEMCACHED_HOSTS: localhost:11211
steps:
# https://github.com/marketplace/actions/setup-go-environment
- name: Set up Go ${{ env.GO_VERSION }}
uses: actions/setup-go@v2
with:
go-version: ${{ env.GO_VERSION }}
# https://github.com/marketplace/actions/checkout
- name: Check out code
uses: actions/checkout@v2
with:
fetch-depth: 0
# https://github.com/marketplace/actions/cache
- name: Cache Go modules
uses: actions/cache@v2
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Check and get dependencies
run: |
go mod tidy
git diff --exit-code go.mod
git diff --exit-code go.sum
go mod download
- name: Documentation validation
run: make validate-doc
# https://golangci-lint.run/usage/install#other-ci
- name: Install golangci-lint ${{ env.GOLANGCI_LINT_VERSION }}
run: |
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin ${GOLANGCI_LINT_VERSION}
golangci-lint --version
- name: Install Pebble and challtestsrv
run: GO111MODULE=off go get -u github.com/letsencrypt/pebble/...
- name: Set up a Memcached server
uses: niden/actions-memcached@v7
- name: Setup /etc/hosts
run: |
echo "127.0.0.1 acme.wtf" | sudo tee -a /etc/hosts
echo "127.0.0.1 lego.wtf" | sudo tee -a /etc/hosts
echo "127.0.0.1 acme.lego.wtf" | sudo tee -a /etc/hosts
echo "127.0.0.1 légô.wtf" | sudo tee -a /etc/hosts
echo "127.0.0.1 xn--lg-bja9b.wtf" | sudo tee -a /etc/hosts
- name: Make
run: |
make
make clean
- name: Install Hugo
run: |
wget -O /tmp/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.deb
sudo dpkg -i /tmp/hugo.deb
- name: Build Documentation
run: make docs-build
# https://github.com/marketplace/actions/github-pages
- name: Deploy to GitHub Pages
uses: crazy-max/ghaction-github-pages@v2
if: github.event_name == 'push'
with:
target_branch: gh-pages
build_dir: docs/public
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# https://goreleaser.com/ci/actions/
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
if: startsWith(github.ref, 'refs/tags/v')
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN_REPO }}
# Install Docker image multi-arch builder
- name: Install Seihon ${{ env.SEIHON_VERSION }}
if: startsWith(github.ref, 'refs/tags/v')
run: |
curl -sSfL https://raw.githubusercontent.com/ldez/seihon/master/godownloader.sh | sh -s -- -b $(go env GOPATH)/bin ${SEIHON_VERSION}
seihon --version
- name: Docker Login
if: startsWith(github.ref, 'refs/tags/v')
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin
- name: Publish Docker Images (Seihon)
if: startsWith(github.ref, 'refs/tags/v')
run: make publish-images

View file

@ -1,105 +0,0 @@
language: go
cache:
directories:
- $GOPATH/pkg/mod
jobs:
fast_finish: true
include:
- go: 1.14.x
- go: 1.15.x
env: STABLE=true
- go: 1.x
- go: tip
allow_failures:
- go: tip
go_import_path: github.com/go-acme/lego
env:
global:
- MEMCACHED_HOSTS=localhost:11211
- GO111MODULE=on
services:
- memcached
addons:
hosts:
# for e2e tests
- acme.wtf
- lego.wtf
- acme.lego.wtf
- légô.wtf
- xn--lg-bja9b.wtf
before_install:
- '[ "${TRAVIS_PULL_REQUEST}" = "false" ] && openssl aes-256-cbc -K $encrypted_26c593b079d9_key -iv $encrypted_26c593b079d9_iv -in .gitcookies.enc -out .gitcookies -d || true'
# Install Pebble and challtestsrv
- GO111MODULE=off go get -u github.com/letsencrypt/pebble/...
# Install linters and misspell
- curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | bash -s -- -b $GOPATH/bin ${GOLANGCI_LINT_VERSION}
- golangci-lint --version
# Hugo - documentation
- wget -O /tmp/hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.54.0/hugo_0.54.0_Linux-64bit.deb
- sudo dpkg -i /tmp/hugo.deb
# Install Docker image multi-arch builder
- curl -sfL https://raw.githubusercontent.com/ldez/seihon/master/godownloader.sh | bash -s -- -b "${GOPATH}/bin" ${SEIHON_VERSION}
- seihon --version
install:
- go mod tidy
- git diff --exit-code go.mod
- git diff --exit-code go.sum
- go mod download
before_script:
- make validate-doc
after_success:
- make clean
before_deploy:
- >
if ! [ "$BEFORE_DEPLOY_RUN" ]; then
export BEFORE_DEPLOY_RUN=1;
make docs-build;
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin;
fi
deploy:
- provider: pages
local_dir: docs/public
skip_cleanup: true
github_token: ${GITHUB_TOKEN}
on:
condition: $STABLE = true
- provider: script
skip_cleanup: true
script: curl -sL https://git.io/goreleaser | bash
on:
tags: true
condition: $STABLE = true
- provider: releases
api_key: ${GITHUB_TOKEN}
file: dist/lego_*
skip_cleanup: true
overwrite: true
file_glob: true
on:
tags: true
condition: $STABLE = true
- provider: script
skip_cleanup: true
script: make publish-images
on:
tags: true
condition: $STABLE = true

View file

@ -3,8 +3,6 @@
export GO111MODULE=on export GO111MODULE=on
export CGO_ENABLED=0 export CGO_ENABLED=0
SRCS = $(shell git ls-files '*.go' | grep -v '^vendor/')
LEGO_IMAGE := goacme/lego LEGO_IMAGE := goacme/lego
MAIN_DIRECTORY := ./cmd/lego/ MAIN_DIRECTORY := ./cmd/lego/
@ -40,9 +38,6 @@ e2e: clean
checks: checks:
golangci-lint run golangci-lint run
fmt:
gofmt -s -l -w $(SRCS)
# Release helper # Release helper
.PHONY: patch minor major detach .PHONY: patch minor major detach

View file

@ -38,9 +38,8 @@ type EnvLoader struct {
} }
func (l *EnvLoader) MainTest(m *testing.M) int { func (l *EnvLoader) MainTest(m *testing.M) int {
_, force := os.LookupEnv("LEGO_E2E_TESTS") if _, e2e := os.LookupEnv("LEGO_E2E_TESTS"); !e2e {
if _, ci := os.LookupEnv("CI"); !ci && !force { fmt.Fprintln(os.Stderr, "skipping test: e2e tests are disabled. (no 'LEGO_E2E_TESTS' env var)")
fmt.Fprintln(os.Stderr, "skipping test: e2e tests are disabled. (no 'CI' or 'LEGO_E2E_TESTS' env var)")
fmt.Println("PASS") fmt.Println("PASS")
return 0 return 0
} }

View file

@ -8,13 +8,12 @@ import (
func TestForTimeout(t *testing.T) { func TestForTimeout(t *testing.T) {
c := make(chan error) c := make(chan error)
go func() { go func() {
err := For("", 3*time.Second, 1*time.Second, func() (bool, error) { c <- For("", 3*time.Second, 1*time.Second, func() (bool, error) {
return false, nil return false, nil
}) })
c <- err
}() }()
timeout := time.After(4 * time.Second) timeout := time.After(5 * time.Second)
select { select {
case <-timeout: case <-timeout:
t.Fatal("timeout exceeded") t.Fatal("timeout exceeded")

View file

@ -3,6 +3,7 @@ package exec
import ( import (
"fmt" "fmt"
"os" "os"
"strings"
"testing" "testing"
"github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/log"
@ -37,7 +38,7 @@ func TestDNSProvider_Present(t *testing.T) {
Mode: "", Mode: "",
}, },
expected: expected{ expected: expected{
args: "present _acme-challenge.domain. pW9ZKG0xz_PCriK-nCMOjADy9eJcgGWIzkkj2fN4uZM\n", args: "present _acme-challenge.domain. pW9ZKG0xz_PCriK-nCMOjADy9eJcgGWIzkkj2fN4uZM",
}, },
}, },
{ {
@ -55,7 +56,7 @@ func TestDNSProvider_Present(t *testing.T) {
Mode: "RAW", Mode: "RAW",
}, },
expected: expected{ expected: expected{
args: "present -- domain token keyAuth\n", args: "present -- domain token keyAuth",
}, },
}, },
} }
@ -78,7 +79,7 @@ func TestDNSProvider_Present(t *testing.T) {
require.Error(t, err) require.Error(t, err)
} else { } else {
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, test.expected.args, message) assert.Equal(t, test.expected.args, strings.TrimSpace(message))
} }
}) })
} }
@ -110,7 +111,7 @@ func TestDNSProvider_CleanUp(t *testing.T) {
Mode: "", Mode: "",
}, },
expected: expected{ expected: expected{
args: "cleanup _acme-challenge.domain. pW9ZKG0xz_PCriK-nCMOjADy9eJcgGWIzkkj2fN4uZM\n", args: "cleanup _acme-challenge.domain. pW9ZKG0xz_PCriK-nCMOjADy9eJcgGWIzkkj2fN4uZM",
}, },
}, },
{ {
@ -128,7 +129,7 @@ func TestDNSProvider_CleanUp(t *testing.T) {
Mode: "RAW", Mode: "RAW",
}, },
expected: expected{ expected: expected{
args: "cleanup -- domain token keyAuth\n", args: "cleanup -- domain token keyAuth",
}, },
}, },
} }
@ -151,7 +152,7 @@ func TestDNSProvider_CleanUp(t *testing.T) {
require.Error(t, err) require.Error(t, err)
} else { } else {
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, test.expected.args, message) assert.Equal(t, test.expected.args, strings.TrimSpace(message))
} }
}) })
} }

View file

@ -52,7 +52,8 @@ func TestNewDNSProvider(t *testing.T) {
envGoogleApplicationCredentials: "not-a-secret-file", envGoogleApplicationCredentials: "not-a-secret-file",
envMetadataHost: "http://lego.wtf", // defined here to avoid the client cache. envMetadataHost: "http://lego.wtf", // defined here to avoid the client cache.
}, },
expected: "googlecloud: unable to get Google Cloud client: google: error getting credentials using GOOGLE_APPLICATION_CREDENTIALS environment variable: open not-a-secret-file: no such file or directory", // the error message varies according to the OS used.
expected: "googlecloud: unable to get Google Cloud client: google: error getting credentials using GOOGLE_APPLICATION_CREDENTIALS environment variable: ",
}, },
{ {
desc: "missing project", desc: "missing project",
@ -95,7 +96,8 @@ func TestNewDNSProvider(t *testing.T) {
require.NotNil(t, p.config) require.NotNil(t, p.config)
require.NotNil(t, p.client) require.NotNil(t, p.client)
} else { } else {
require.EqualError(t, err, test.expected) require.Error(t, err)
require.Contains(t, err.Error(), test.expected)
} }
}) })
} }

View file

@ -101,7 +101,7 @@ func TestNewDNSProvider(t *testing.T) {
EnvRegion: "us-phoenix-1", EnvRegion: "us-phoenix-1",
EnvCompartmentOCID: "123", EnvCompartmentOCID: "123",
}, },
expected: "oraclecloud: can not create client, bad configuration: x509: decryption password incorrect", expected: "oraclecloud: can not create client, bad configuration: ",
}, },
{ {
desc: "missing OCI_TENANCY_OCID", desc: "missing OCI_TENANCY_OCID",
@ -191,7 +191,8 @@ func TestNewDNSProvider(t *testing.T) {
require.NotNil(t, p.config) require.NotNil(t, p.config)
require.NotNil(t, p.client) require.NotNil(t, p.client)
} else { } else {
require.EqualError(t, err, test.expected) require.Error(t, err)
require.Contains(t, err.Error(), test.expected)
} }
}) })
} }