Skip to content

Merge pull request #17390 from juju/increment-to-3.3.6 #11220

Merge pull request #17390 from juju/increment-to-3.3.6

Merge pull request #17390 from juju/increment-to-3.3.6 #11220

Workflow file for this run

name: "Generate"
on:
push:
branches: [2.*, 3.*, 4.*, main]
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- '**.go'
- 'go.mod'
- '.github/workflows/gen.yml'
- 'Makefile'
- 'make_functions.sh'
workflow_dispatch:
permissions:
contents: read
jobs:
Generate:
name: Generate
runs-on: [self-hosted, linux, arm64, aws, xxlarge]
if: github.event.pull_request.draft == false
steps:
- name: "Checkout"
uses: actions/checkout@v3
- name: "Set up Go"
uses: actions/setup-go@v4
with:
go-version-file: 'go.mod'
cache: true
- name: "Delete all mocks"
shell: bash
run: |
for FILE in $(grep '// Code generated by MockGen. DO NOT EDIT.' -r . -l --include \*.go); do
rm $FILE
done
- name: "Regenerate code"
shell: bash
run: |
# Running go generate by itself is slow over a large codebase, where
# all generate directives are dispersed over many files. Instead, the
# following uses tools for locating and extracting the directives,
# before piping them to go generate in parallel.
#
# 1. grep for go generate directive in the go files recursively.
# 2. Grab the file name of each select file.
# 3. Unique every file, so we only go generate the file once.
# 4. Using xargs perform go generate in parallel.
#
grep -ir "//go:generate" . | awk -F : '{ print $1 }' | uniq | xargs -n 1 -P 8 -I% go generate -x $(realpath %)
- name: "Check diff"
if: success() || failure()
shell: bash
run: |
# The generation sometimes adds things to go.sum. Tidy to remove these.
go mod tidy
git add -A
if [[ -n $(git diff HEAD) ]]; then
# Print the full diff for debugging purposes
git diff HEAD
echo "*****"
echo "The following generated files have been modified:"
git diff --name-status HEAD
echo "Please regenerate these files and check in the changes."
echo "*****"
exit 1
fi