Build with Magefile #104341
1
Makefile
1
Makefile
@ -213,6 +213,7 @@ update-version:
|
|||||||
addon/flamenco/__init__.py \
|
addon/flamenco/__init__.py \
|
||||||
addon/flamenco/manager \
|
addon/flamenco/manager \
|
||||||
addon/flamenco/manager_README.md \
|
addon/flamenco/manager_README.md \
|
||||||
|
magefiles/version.go \
|
||||||
web/app/src/manager-api \
|
web/app/src/manager-api \
|
||||||
web/project-website/data/flamenco.yaml
|
web/project-website/data/flamenco.yaml
|
||||||
@echo 'git tag -a -m "Tagged version ${VERSION}" v${VERSION}'
|
@echo 'git tag -a -m "Tagged version ${VERSION}" v${VERSION}'
|
||||||
|
88
cmd/update-version/magefiles.go
Normal file
88
cmd/update-version/magefiles.go
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"go/ast"
|
||||||
|
"go/format"
|
||||||
|
"go/parser"
|
||||||
|
"go/token"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
const mageFile = "magefiles/version.go"
|
||||||
|
|
||||||
|
// updateMagefiles changes the version number in the Mage files.
|
||||||
|
// Returns whether the file actually changed.
|
||||||
|
func updateMagefiles() bool {
|
||||||
|
logger := log.With().Str("filename", mageFile).Logger()
|
||||||
|
|
||||||
|
// Parse the mage file as AST.
|
||||||
|
fset := token.NewFileSet()
|
||||||
|
astFile, err := parser.ParseFile(fset, mageFile, nil, parser.SkipObjectResolution|parser.ParseComments)
|
||||||
|
if err != nil {
|
||||||
|
logger.Fatal().Err(err).Msgf("could not update mage version file")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform replacements on the AST.
|
||||||
|
replacements := map[string]string{
|
||||||
|
"version": cliArgs.newVersion,
|
||||||
|
"releaseCycle": releaseCycle,
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
lastIdent *ast.Ident // Last-seen identifier.
|
||||||
|
anyFieldChanged bool
|
||||||
|
)
|
||||||
|
|
||||||
|
ast.Inspect(astFile, func(node ast.Node) bool {
|
||||||
|
switch x := node.(type) {
|
||||||
|
case *ast.Ident:
|
||||||
|
lastIdent = x
|
||||||
|
|
||||||
|
case *ast.BasicLit:
|
||||||
|
replacement, ok := replacements[lastIdent.Name]
|
||||||
|
if ok {
|
||||||
|
newValue := fmt.Sprintf("%q", replacement)
|
||||||
|
if x.Value != newValue {
|
||||||
|
logger.Info().
|
||||||
|
Str("old", x.Value).
|
||||||
|
Str("new", newValue).
|
||||||
|
Msg("updating mage version file")
|
||||||
|
x.Value = newValue
|
||||||
|
anyFieldChanged = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
// Open a temporary file for writing.
|
||||||
|
mageDir := filepath.Dir(mageFile)
|
||||||
|
writer, err := os.CreateTemp(mageDir, filepath.Base(mageFile)+"*.go")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal().Err(err).Msgf("cannot create file in %s", mageDir)
|
||||||
|
}
|
||||||
|
defer writer.Close()
|
||||||
|
|
||||||
|
// Write the altered AST to the temp file.
|
||||||
|
if err := format.Node(writer, fset, astFile); err != nil {
|
||||||
|
log.Fatal().Err(err).Msgf("cannot write updated version of %s to %s", mageFile, writer.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the file.
|
||||||
|
if err := writer.Close(); err != nil {
|
||||||
|
log.Fatal().Err(err).Msgf("cannot close %s", writer.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Overwrite the original mage file with the temp file.
|
||||||
|
if err := os.Rename(writer.Name(), mageFile); err != nil {
|
||||||
|
log.Fatal().Err(err).Msgf("cannot rename %s to %s", writer.Name(), mageFile)
|
||||||
|
}
|
||||||
|
|
||||||
|
return anyFieldChanged
|
||||||
|
}
|
@ -6,6 +6,7 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/mattn/go-colorable"
|
"github.com/mattn/go-colorable"
|
||||||
@ -13,7 +14,9 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cliArgs struct {
|
// Global variables used by the updateXXX() functions.
|
||||||
|
var (
|
||||||
|
cliArgs struct {
|
||||||
// Logging level flags.
|
// Logging level flags.
|
||||||
quiet, debug, trace bool
|
quiet, debug, trace bool
|
||||||
|
|
||||||
@ -21,6 +24,9 @@ var cliArgs struct {
|
|||||||
updateMakefile bool
|
updateMakefile bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
releaseCycle string
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
parseCliArgs()
|
parseCliArgs()
|
||||||
output := zerolog.ConsoleWriter{Out: colorable.NewColorableStdout(), TimeFormat: time.RFC3339}
|
output := zerolog.ConsoleWriter{Out: colorable.NewColorableStdout(), TimeFormat: time.RFC3339}
|
||||||
@ -29,11 +35,23 @@ func main() {
|
|||||||
|
|
||||||
log.Info().Str("version", cliArgs.newVersion).Msg("updating Flamenco version")
|
log.Info().Str("version", cliArgs.newVersion).Msg("updating Flamenco version")
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case strings.Contains(cliArgs.newVersion, "alpha"), strings.Contains(cliArgs.newVersion, "dev"):
|
||||||
|
releaseCycle = "alpha"
|
||||||
|
case strings.Contains(cliArgs.newVersion, "beta"):
|
||||||
|
releaseCycle = "beta"
|
||||||
|
case strings.Contains(cliArgs.newVersion, "rc"):
|
||||||
|
releaseCycle = "rc"
|
||||||
|
default:
|
||||||
|
releaseCycle = "release"
|
||||||
|
}
|
||||||
|
|
||||||
var anyFileWasChanged bool
|
var anyFileWasChanged bool
|
||||||
if cliArgs.updateMakefile {
|
if cliArgs.updateMakefile {
|
||||||
anyFileWasChanged = anyFileWasChanged || updateMakefile()
|
anyFileWasChanged = updateMakefile() || anyFileWasChanged
|
||||||
}
|
}
|
||||||
anyFileWasChanged = anyFileWasChanged || updateAddon()
|
anyFileWasChanged = updateAddon() || anyFileWasChanged
|
||||||
|
anyFileWasChanged = updateMagefiles() || anyFileWasChanged
|
||||||
|
|
||||||
if !anyFileWasChanged {
|
if !anyFileWasChanged {
|
||||||
log.Warn().Msg("nothing changed")
|
log.Warn().Msg("nothing changed")
|
||||||
|
@ -11,8 +11,8 @@ import (
|
|||||||
// To update the version number in all the relevant places, update the VERSION
|
// To update the version number in all the relevant places, update the VERSION
|
||||||
// variable below and run `mage update-version`.
|
// variable below and run `mage update-version`.
|
||||||
const (
|
const (
|
||||||
version = "3.3-beta0"
|
version = "3.6-alpha5"
|
||||||
releaseCycle = "beta"
|
releaseCycle = "alpha"
|
||||||
)
|
)
|
||||||
|
|
||||||
func gitHash() (string, error) {
|
func gitHash() (string, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user