From 2b7a0f3fd4bd8a5aa43eec90e7f6db1b69e9c648 Mon Sep 17 00:00:00 2001
From: Hidde Beydals <hello@hidde.co>
Date: Mon, 8 Mar 2021 14:10:36 +0100
Subject: [PATCH] Improve build process embedded manifests

This commit changes the way the build of manifests is triggered by
making smarter use of the capabilities of Make. The result should be
that the manifests are only regenerated if:

1. There is no `cmd/flux/manifests/` directory.
2. There have been made changes to the YAML files in the `manifests/`
   directory that are newer than the files in `cmd/flux/manifests/`.

Signed-off-by: Hidde Beydals <hello@hidde.co>
---
 .github/workflows/bootstrap.yaml          |  2 +-
 .github/workflows/release.yaml            |  2 +-
 .github/workflows/scan.yaml               |  2 +-
 Makefile                                  | 11 +++++++----
 cmd/flux/{embed.go => manifests.embed.go} |  0
 5 files changed, 10 insertions(+), 7 deletions(-)
 rename cmd/flux/{embed.go => manifests.embed.go} (100%)

diff --git a/.github/workflows/bootstrap.yaml b/.github/workflows/bootstrap.yaml
index 41d569a6..23942d47 100644
--- a/.github/workflows/bootstrap.yaml
+++ b/.github/workflows/bootstrap.yaml
@@ -30,7 +30,7 @@ jobs:
         uses: fluxcd/pkg//actions/kustomize@main
       - name: Build
         run: |
-          make build-manifests
+          make cmd/flux/manifests
           go build -o /tmp/flux ./cmd/flux
       - name: Set outputs
         id: vars
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 8a911d12..0a920706 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -30,7 +30,7 @@ jobs:
         uses: fluxcd/pkg//actions/kustomize@main
       - name: Generate manifests
         run: |
-          make build-manifests
+          make cmd/flux/manifests
           ./manifests/scripts/bundle.sh ./output manifests.tar.gz
           kustomize build ./manifests/install > ./output/install.yaml
       - name: Run GoReleaser
diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml
index b020c509..029a59a6 100644
--- a/.github/workflows/scan.yaml
+++ b/.github/workflows/scan.yaml
@@ -31,7 +31,7 @@ jobs:
         uses: fluxcd/pkg//actions/kustomize@main
       - name: Build manifests
         run: |
-          make build-manifests
+          make cmd/flux/manifests
       - name: Run Snyk to check for vulnerabilities
         uses: snyk/actions/golang@master
         continue-on-error: true
diff --git a/Makefile b/Makefile
index ed6333f3..b05f16c6 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,7 @@
 VERSION?=$(shell grep 'VERSION' cmd/flux/main.go | awk '{ print $$4 }' | tr -d '"')
+EMBEDDED_MANIFESTS_TARGET=cmd/flux/manifests
+
+rwildcard=$(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2)) $(filter $(subst *,%,$(2)),$(d)))
 
 all: test build
 
@@ -11,13 +14,13 @@ fmt:
 vet:
 	go vet ./...
 
-test: build-manifests tidy fmt vet docs
+test: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet docs
 	go test ./... -coverprofile cover.out
 
-build-manifests:
+$(EMBEDDED_MANIFESTS_TARGET): $(call rwildcard,manifests/,*.yaml *.json)
 	./manifests/scripts/bundle.sh
 
-build:
+build: $(EMBEDDED_MANIFESTS_TARGET)
 	CGO_ENABLED=0 go build -o ./bin/flux ./cmd/flux
 
 install:
@@ -25,7 +28,7 @@ install:
 
 .PHONY: docs
 docs:
-	rm docs/cmd/*
+	rm -rf docs/cmd/*
 	mkdir -p ./docs/cmd && go run ./cmd/flux/ docgen
 
 install-dev:
diff --git a/cmd/flux/embed.go b/cmd/flux/manifests.embed.go
similarity index 100%
rename from cmd/flux/embed.go
rename to cmd/flux/manifests.embed.go
-- 
GitLab