improve ci cache management - initial cleanup (#849)

## Description

An attempt to minimize and centralize how we're caching go builds.
Not necessarily going to solve all our CI issues, but should make
changes building on this state much easier.

## Type of change

- [x] 💻 CI/Deployment

## Issue(s)

* #790

## Test Plan

- [ ] 💪 Manual
- [ ]  Unit test
- [x] 💚 E2E
This commit is contained in:
Keepers 2022-09-15 10:25:05 -06:00 committed by GitHub
parent e92cb1b62b
commit a368570e20
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 131 deletions

View File

@ -17,61 +17,47 @@ concurrency:
cancel-in-progress: true cancel-in-progress: true
jobs: jobs:
# ----------------------------------------------------------------------------------------------------
# --- Prechecks and Checkouts ------------------------------------------------------------------------
# ----------------------------------------------------------------------------------------------------
precheck: precheck:
uses: alcionai/corso/.github/workflows/_filechange_checker.yml@main uses: alcionai/corso/.github/workflows/_filechange_checker.yml@main
Test-Suite: checkout:
needs: precheck needs: precheck
environment: Testing environment: Testing
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# single setup and sum cache handling here.
# the results will cascade onto both testing and linting.
- name: Setup Golang with cache
if: needs.precheck.outputs.fileschanged == 'true'
uses: magnetikonline/action-golang-cache@v3
with:
go-version-file: src/go.mod
# ----------------------------------------------------------------------------------------------------
# --- Integration and Unit Testing -------------------------------------------------------------------
# ----------------------------------------------------------------------------------------------------
Test-Suite:
needs: [precheck, checkout]
environment: Testing
runs-on: ubuntu-latest
defaults: defaults:
run: run:
working-directory: src working-directory: src
steps: steps:
- name: Checkout repository - uses: actions/checkout@v3
uses: actions/checkout@v3
# Get values for cache paths to be used in later steps - name: Setup Golang with cache
- name: Local Cache Setup
if: needs.precheck.outputs.fileschanged == 'true' if: needs.precheck.outputs.fileschanged == 'true'
id: go-cache-paths uses: magnetikonline/action-golang-cache@v3
run: |
echo "::set-output name=go-build::$(go env GOCACHE)"
echo "::set-output name=go-mod::$(go env GOMODCACHE)"
- name: Golang Setup
if: needs.precheck.outputs.fileschanged == 'true'
uses: actions/setup-go@v3
with: with:
go-version: 1.18 go-version-file: src/go.mod
cache: true
cache-dependency-path: src/go.sum
# download packages
- name: Cache Go Mod
if: needs.precheck.outputs.fileschanged == 'true'
id: modcache
uses: actions/cache@v3
with:
path: ${{ steps.go-cache-paths.outputs.go-mod }}
key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }}
- name: Run go mod download
if: needs.precheck.outputs.fileschanged == 'true' && steps.modcache.outputs.cache-hit != 'true'
run: go mod download
# build the binary
- name: Cache Go build
if: needs.precheck.outputs.fileschanged == 'true'
id: gocache
uses: actions/cache@v3
with:
path: ${{ steps.go-cache-paths.outputs.go-build }}
key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.sum') }}
- name: Go build
if: needs.precheck.outputs.fileschanged == 'true' && steps.gocache.outputs.cache-hit != 'true'
run: go build -v ./...
# Install gotestfmt # Install gotestfmt
- name: Set up gotestfmt - name: Set up gotestfmt
@ -110,4 +96,40 @@ jobs:
with: with:
name: test-log name: test-log
path: /tmp/gotest.log path: /tmp/gotest.log
if-no-files-found: error if-no-files-found: error
# ----------------------------------------------------------------------------------------------------
# --- Source Code Linting ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------------------------------
Linting:
needs: [precheck, checkout]
environment: Testing
runs-on: ubuntu-latest
defaults:
run:
working-directory: src
steps:
- uses: actions/checkout@v3
- name: Setup Golang with cache
if: needs.precheck.outputs.fileschanged == 'true'
uses: magnetikonline/action-golang-cache@v3
with:
go-version-file: src/go.mod
- name: Go Lint
if: needs.precheck.outputs.fileschanged == 'true'
uses: golangci/golangci-lint-action@v3.2.0
with:
version: v1.45.2
working-directory: ./src
# check licenses
- name: Get go-licenses
if: needs.precheck.outputs.fileschanged == 'true'
run: go install github.com/google/go-licenses@latest
- name: Run go-licenses
if: needs.precheck.outputs.fileschanged == 'true'
run: go-licenses check github.com/alcionai/corso/src --ignore github.com/alcionai/corso/src

View File

@ -1,88 +0,0 @@
name: Lint
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
pull-requests: read
# cancel currently running jobs if a new version of the branch is pushed
concurrency:
group: ci-linting-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
precheck:
uses: alcionai/corso/.github/workflows/_filechange_checker.yml@main
Linting:
needs: precheck
environment: Testing
runs-on: ubuntu-latest
defaults:
run:
working-directory: src
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Get values for cache paths to be used in later steps
- name: Local Cache Setup
if: needs.precheck.outputs.fileschanged == 'true'
id: go-cache-paths
run: |
echo "::set-output name=go-build::$(go env GOCACHE)"
echo "::set-output name=go-mod::$(go env GOMODCACHE)"
- name: Golang Setup
if: needs.precheck.outputs.fileschanged == 'true'
uses: actions/setup-go@v3
with:
go-version: 1.18
- name: Cache Go Mod
if: needs.precheck.outputs.fileschanged == 'true'
id: modcache
uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }}
- name: Download package dependencies
if: needs.precheck.outputs.fileschanged == 'true' && steps.modcache.outputs.cache-hit != 'true'
run: go mod download
- name: Cache Go build
if: needs.precheck.outputs.fileschanged == 'true'
id: gocache
uses: actions/cache@v3
with:
path: ~/.cache/go-build
key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.sum') }}
- name: Build for Lint
if: needs.precheck.outputs.fileschanged == 'true' && steps.gocache.outputs.cache-hit != 'true'
run: go build ./...
- name: Go Lint
if: needs.precheck.outputs.fileschanged == 'true'
uses: golangci/golangci-lint-action@v3.2.0
with:
version: v1.45.2
working-directory: ./src
skip-pkg-cache: true
skip-build-cache: true
skip-go-installation: true
# check licenses
- name: Get go-licenses
if: needs.precheck.outputs.fileschanged == 'true'
run: go install github.com/google/go-licenses@latest
- name: Run go-licenses
if: needs.precheck.outputs.fileschanged == 'true'
run: go-licenses check github.com/alcionai/corso/src --ignore github.com/alcionai/corso/src