diff --git a/.github/workflows/equinox.yml b/.github/workflows/equinox.yml index 5b80884db1..bf9d2e9f3f 100644 --- a/.github/workflows/equinox.yml +++ b/.github/workflows/equinox.yml @@ -21,7 +21,7 @@ jobs: env: EQUINOX_API_TOKEN: ${{ secrets.EQUINOX_API_TOKEN }} EQUINOX_SIGNING_KEY: ${{ secrets.EQUINOX_SIGNING_KEY }} - run: equinox release --channel devel --version=$GITHUB_SHA --draft --platforms=darwin_amd64 --app=app_i4iCp1SuYfZ --token=$EQUINOX_API_TOKEN ./cmd/sqlc + run: go run scripts/release.go -draft devel darwin_amd64 linux: name: Build on Linux @@ -39,6 +39,6 @@ jobs: env: EQUINOX_API_TOKEN: ${{ secrets.EQUINOX_API_TOKEN }} EQUINOX_SIGNING_KEY: ${{ secrets.EQUINOX_SIGNING_KEY }} - run: ./equinox release --channel devel --version=$GITHUB_SHA --platforms=linux_amd64 --app=app_i4iCp1SuYfZ --token=$EQUINOX_API_TOKEN ./cmd/sqlc + run: go run scripts/release.go devel linux_amd64 diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go index 4f25d9523e..4108e28365 100644 --- a/internal/cmd/cmd.go +++ b/internal/cmd/cmd.go @@ -37,11 +37,17 @@ func Do(args []string, stdin io.Reader, stdout io.Writer, stderr io.Writer) int return 1 } +var version string + var versionCmd = &cobra.Command{ Use: "version", Short: "Print the sqlc version number", Run: func(cmd *cobra.Command, args []string) { - fmt.Println("v0.0.1") + if version == "" { + fmt.Printf("%s\n", "SNAPSHOT") + } else { + fmt.Printf("%s\n", version) + } }, } diff --git a/scripts/release.go b/scripts/release.go new file mode 100755 index 0000000000..f2e468abeb --- /dev/null +++ b/scripts/release.go @@ -0,0 +1,61 @@ +package main + +import ( + "flag" + "fmt" + "log" + "os" + "os/exec" + "strings" +) + +func main() { + draft := flag.Bool("draft", false, "create a draft release") + flag.Parse() + + sha := os.Getenv("GITHUB_SHA") + cmd := exec.Command("git", "show", "--no-patch", "--no-notes", "--pretty=%ci", sha) + out, err := cmd.CombinedOutput() + if err != nil { + log.Fatal(err) + } + + var date string + parts := strings.Split(string(out), " ") + date = strings.Replace(parts[0]+parts[1], "-", "", -1) + date = strings.Replace(date, ":", "", -1) + version := fmt.Sprintf("v0.0.0-%s-%s", date, sha[:12]) + + x := "-X github.com/kyleconroy/sqlc/internal/cmd.version=" + version + log.Printf("Releasing %s on channel %s", flag.Arg(1), flag.Arg(0)) + + xname := "./equinox" + if _, err := os.Stat("./equinox"); os.IsNotExist(err) { + xname = "equinox" + } + + args := []string{"release", + "--channel", flag.Arg(0), + "--version", version, + } + + if *draft { + args = append(args, "--draft") + } + + args = append(args, []string{ + "--platforms", flag.Arg(1), + "--app", "app_i4iCp1SuYfZ", + "--token", os.Getenv("EQUINOX_API_TOKEN"), + "--", + "-ldflags", x, "./cmd/sqlc", + }...) + + cmd = exec.Command(xname, args...) + cmd.Env = os.Environ() + out, err = cmd.CombinedOutput() + log.Println(strings.TrimSpace(string(out))) + if err != nil { + log.Fatal(err) + } +}