server/magefile.go (122 lines of code) (raw):
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//go:build mage
// +build mage
package main
import (
"context"
"fmt"
"os"
"runtime"
"github.com/common-nighthawk/go-figure"
"github.com/fatih/color"
"github.com/magefile/mage/mg"
"github.com/elastic/harp/build/artifact"
"github.com/elastic/harp/build/mage/git"
"github.com/elastic/harp/build/mage/golang"
"github.com/elastic/harp/build/mage/release"
)
var Default = Build
var descriptor = &artifact.Command{
Package: "github.com/elastic/harp-plugins/server",
Module: "cmd/harp-server",
Name: "Harp Server",
Description: "Harp Crate Server",
}
// Build the artefact
func Build() error {
banner := figure.NewFigure("Harp Server", "", true)
banner.Print()
fmt.Println("")
color.Red("# Build Info ---------------------------------------------------------------")
fmt.Printf("Go version : %s\n", runtime.Version())
version, err := git.TagMatch("server/v*")
if err != nil {
return err
}
fmt.Printf("Git tag : %s\n", version)
color.Red("# Pipeline -----------------------------------------------------------------")
mg.SerialDeps(golang.Vendor, golang.License("../"), Generate, golang.Lint("../"), Test)
color.Red("# Artifact(s) --------------------------------------------------------------")
mg.Deps(Compile)
return nil
}
// Generate code
func Generate() {
color.Cyan("## Generate code")
color.Blue("### Dispatchers")
golang.Generate("HTTP", "github.com/elastic/harp-plugins/server/cmd/harp-server/internal/dispatchers/http")()
golang.Generate("Vault", "github.com/elastic/harp-plugins/server/cmd/harp-server/internal/dispatchers/vault")()
golang.Generate("gRPC", "github.com/elastic/harp-plugins/server/cmd/harp-server/internal/dispatchers/grpc")()
}
// Test application
func Test() {
color.Cyan("## Tests")
mg.SerialDeps(
func() error {
return golang.UnitTest("github.com/elastic/harp-plugins/server/pkg/...")()
},
)
}
// Compile artefacts
func Compile() error {
// Extract git version
version, err := git.TagMatch("server/v*")
if err != nil {
return err
}
return golang.Build("harp-server", "github.com/elastic/harp-plugins/server/cmd/harp-server", version)()
}
// Release
func Release(ctx context.Context) error {
color.Red(fmt.Sprintf("# Releasing (%s) ---------------------------------------------------------------", os.Getenv("RELEASE")))
// Extract git version
version, err := git.TagMatch("server/v*")
if err != nil {
return err
}
color.Cyan("## Cross compiling artifact")
mg.CtxDeps(ctx,
func() error {
return golang.Release(
"harp-server",
"github.com/elastic/harp-plugins/server/cmd/harp-server",
version,
golang.GOOS("darwin"), golang.GOARCH("amd64"),
)()
},
func() error {
return golang.Release(
"harp-server",
"github.com/elastic/harp-plugins/server/cmd/harp-server",
version,
golang.GOOS("darwin"), golang.GOARCH("arm64"),
)()
},
func() error {
return golang.Release(
"harp-server",
"github.com/elastic/harp-plugins/server/cmd/harp-server",
version,
golang.GOOS("linux"), golang.GOARCH("amd64"),
)()
},
func() error {
return golang.Release(
"harp-server",
"github.com/elastic/harp-plugins/server/cmd/harp-server",
version,
golang.GOOS("linux"), golang.GOARCH("arm"), golang.GOARM("7"),
)()
},
func() error {
return golang.Release(
"harp-server",
"github.com/elastic/harp-plugins/server/cmd/harp-server",
version,
golang.GOOS("linux"), golang.GOARCH("arm64"),
)()
},
func() error {
return golang.Release(
"harp-server",
"github.com/elastic/harp-plugins/server/cmd/harp-server",
version,
golang.GOOS("windows"), golang.GOARCH("amd64"),
)()
},
)
return ctx.Err()
}
func Homebrew() error {
return release.HomebrewFormula(descriptor)()
}