Skip to content

Commit 5821eff

Browse files
author
Supreeth Basabattini
authored
Refine ADO magefile (#480)
* Split magefile into individual pieces * fix: pre-commit checks
1 parent 2211d90 commit 5821eff

9 files changed

Lines changed: 1588 additions & 1494 deletions

File tree

magefile.go

Lines changed: 0 additions & 1494 deletions
This file was deleted.

magefiles/build.go

Lines changed: 477 additions & 0 deletions
Large diffs are not rendered by default.

magefiles/common.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//go:build mage
2+
// +build mage
3+
4+
package main
5+
6+
import (
7+
"fmt"
8+
"os/exec"
9+
"strings"
10+
11+
"github.com/mt-sre/devkube/magedeps"
12+
)
13+
14+
const (
15+
module = "github.com/openshift/addon-operator"
16+
defaultImageOrg = "quay.io/app-sre"
17+
)
18+
19+
var (
20+
workDir string // Working directory of the project
21+
depsDir magedeps.DependencyDirectory // Dependency directory
22+
cacheDir string
23+
)
24+
25+
func gnuSed() bool {
26+
cmd := exec.Command("sed", "--version")
27+
output, err := cmd.CombinedOutput()
28+
if err != nil {
29+
fmt.Println("warning: sed --version returned error. this could mean that 'sed' is not 'gnu sed':", string(output), err)
30+
return false
31+
}
32+
return strings.Contains(string(output), "GNU")
33+
}

magefiles/config.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//go:build mage
2+
// +build mage
3+
4+
package main
5+
6+
import (
7+
"fmt"
8+
"os"
9+
"path"
10+
11+
"github.com/go-logr/logr"
12+
"github.com/go-logr/stdr"
13+
"github.com/mt-sre/devkube/dev"
14+
"github.com/mt-sre/devkube/magedeps"
15+
)
16+
17+
var (
18+
logger logr.Logger = stdr.New(nil)
19+
containerRuntime string
20+
)
21+
22+
func init() {
23+
var err error
24+
// Directories
25+
workDir, err = os.Getwd()
26+
if err != nil {
27+
panic(fmt.Errorf("getting work dir: %w", err))
28+
}
29+
cacheDir = path.Join(workDir + "/" + ".cache")
30+
depsDir = magedeps.DependencyDirectory(path.Join(workDir, ".deps"))
31+
os.Setenv("PATH", depsDir.Bin()+":"+os.Getenv("PATH"))
32+
33+
logger = stdr.New(nil)
34+
}
35+
36+
// setupContainerRuntime is a dependency for all targets requiring a container runtime
37+
func setupContainerRuntime() {
38+
containerRuntime = os.Getenv("CONTAINER_RUNTIME")
39+
if len(containerRuntime) == 0 || containerRuntime == "auto" {
40+
cr, err := dev.DetectContainerRuntime()
41+
if err != nil {
42+
panic(err)
43+
}
44+
containerRuntime = string(cr)
45+
logger.Info("detected container-runtime", "container-runtime", containerRuntime)
46+
}
47+
}

magefiles/dependency.go

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
//go:build mage
2+
// +build mage
3+
4+
package main
5+
6+
import (
7+
"fmt"
8+
"os"
9+
"path"
10+
11+
"github.com/magefile/mage/mg"
12+
"github.com/magefile/mage/sh"
13+
)
14+
15+
// Dependency Versions
16+
const (
17+
controllerGenVersion = "0.6.2"
18+
kindVersion = "0.20.0"
19+
yqVersion = "4.35.1"
20+
goimportsVersion = "0.12.0"
21+
golangciLintVersion = "1.54.2"
22+
olmVersion = "0.20.0"
23+
opmVersion = "1.24.0"
24+
pkoCliVersion = "1.6.1"
25+
helmVersion = "3.12.2"
26+
)
27+
28+
type Dependency mg.Namespace
29+
30+
func (d Dependency) All() {
31+
mg.Deps(
32+
Dependency.Kind,
33+
Dependency.ControllerGen,
34+
Dependency.YQ,
35+
Dependency.Goimports,
36+
Dependency.GolangciLint,
37+
Dependency.Helm,
38+
Dependency.Opm,
39+
)
40+
}
41+
42+
// Ensure Kind dependency - Kubernetes in Docker (or Podman)
43+
func (d Dependency) Kind() error {
44+
return depsDir.GoInstall("kind",
45+
"sigs.k8s.io/kind", kindVersion)
46+
}
47+
48+
// Ensure controller-gen - kubebuilder code and manifest generator.
49+
func (d Dependency) ControllerGen() error {
50+
return depsDir.GoInstall("controller-gen",
51+
"sigs.k8s.io/controller-tools/cmd/controller-gen", controllerGenVersion)
52+
}
53+
54+
// Ensure yq - jq but for Yaml, written in Go.
55+
func (d Dependency) YQ() error {
56+
return depsDir.GoInstall("yq",
57+
"github.com/mikefarah/yq/v4", yqVersion)
58+
}
59+
60+
func (d Dependency) Goimports() error {
61+
return depsDir.GoInstall("go-imports",
62+
"golang.org/x/tools/cmd/goimports", goimportsVersion)
63+
}
64+
65+
func (d Dependency) GolangciLint() error {
66+
return depsDir.GoInstall("golangci-lint",
67+
"github.com/golangci/golangci-lint/cmd/golangci-lint", golangciLintVersion)
68+
}
69+
70+
func (d Dependency) Helm() error {
71+
return depsDir.GoInstall("helm", "helm.sh/helm/v3/cmd/helm", helmVersion)
72+
}
73+
74+
func (d Dependency) Opm() error {
75+
// TODO: move this into devkube library, to ensure the depsDir is present, even if you just call "NeedsRebuild"
76+
if err := os.MkdirAll(depsDir.Bin(), os.ModePerm); err != nil {
77+
return fmt.Errorf("create dependency dir: %w", err)
78+
}
79+
80+
needsRebuild, err := depsDir.NeedsRebuild("opm", opmVersion)
81+
if err != nil {
82+
return err
83+
}
84+
if !needsRebuild {
85+
return nil
86+
}
87+
88+
// Tempdir
89+
tempDir, err := os.MkdirTemp(cacheDir, "")
90+
if err != nil {
91+
return fmt.Errorf("temp dir: %w", err)
92+
}
93+
defer os.RemoveAll(tempDir)
94+
95+
// Download
96+
tempOPMBin := path.Join(tempDir, "opm")
97+
if err := sh.RunV(
98+
"curl", "-L", "--fail",
99+
"-o", tempOPMBin,
100+
fmt.Sprintf(
101+
"https://github.com/operator-framework/operator-registry/releases/download/v%s/linux-amd64-opm",
102+
opmVersion,
103+
),
104+
); err != nil {
105+
return fmt.Errorf("downloading opm: %w", err)
106+
}
107+
108+
if err := os.Chmod(tempOPMBin, 0755); err != nil {
109+
return fmt.Errorf("make opm executable: %w", err)
110+
}
111+
112+
// Move
113+
if err := os.Rename(tempOPMBin, path.Join(depsDir.Bin(), "opm")); err != nil {
114+
return fmt.Errorf("move opm: %w", err)
115+
}
116+
return nil
117+
}
118+
119+
func (d Dependency) PkoCli() error {
120+
if err := os.MkdirAll(depsDir.Bin(), os.ModePerm); err != nil {
121+
return fmt.Errorf("create dependency dir: %w", err)
122+
}
123+
124+
needsRebuild, err := depsDir.NeedsRebuild("kubectl-package", pkoCliVersion)
125+
if err != nil {
126+
return err
127+
}
128+
if !needsRebuild {
129+
return nil
130+
}
131+
132+
// Tempdir
133+
tempDir, err := os.MkdirTemp(cacheDir, "")
134+
if err != nil {
135+
return fmt.Errorf("temp dir: %w", err)
136+
}
137+
defer os.RemoveAll(tempDir)
138+
139+
// Download
140+
tempPkoCliBin := path.Join(tempDir, "kubectl-package")
141+
if err := sh.RunV(
142+
"curl", "-L", "--fail",
143+
"-o", tempPkoCliBin,
144+
fmt.Sprintf(
145+
"https://github.com/package-operator/package-operator/releases/download/v%s/kubectl-package_linux_amd64",
146+
pkoCliVersion,
147+
),
148+
); err != nil {
149+
return fmt.Errorf("downloading kubectl-package: %w", err)
150+
}
151+
152+
if err := os.Chmod(tempPkoCliBin, 0755); err != nil {
153+
return fmt.Errorf("make kubectl-package executable: %w", err)
154+
}
155+
156+
// Move
157+
if err := os.Rename(tempPkoCliBin, path.Join(depsDir.Bin(), "kubectl-package")); err != nil {
158+
return fmt.Errorf("move kubectl-package: %w", err)
159+
}
160+
return nil
161+
}

0 commit comments

Comments
 (0)