main.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "os"
  7. "text/template"
  8. "github.com/google/go-github/v50/github"
  9. )
  10. type Tag struct {
  11. TagName string
  12. }
  13. func getLatestCLIRelease() (string, error) {
  14. client := github.NewClient(nil)
  15. rel, _, err := client.Repositories.GetLatestRelease(context.Background(), "porter-dev", "porter")
  16. if err != nil {
  17. return "", err
  18. }
  19. return rel.GetTagName(), nil
  20. }
  21. func serve(w http.ResponseWriter, req *http.Request) {
  22. latestTag, err := getLatestCLIRelease()
  23. if err != nil {
  24. w.WriteHeader(http.StatusInternalServerError)
  25. return
  26. }
  27. contents, err := os.ReadFile("install.sh")
  28. if err != nil {
  29. w.WriteHeader(http.StatusInternalServerError)
  30. return
  31. }
  32. tmpl, err := template.New("install").Parse(string(contents))
  33. if err != nil {
  34. w.WriteHeader(http.StatusInternalServerError)
  35. return
  36. }
  37. err = tmpl.Execute(w, Tag{TagName: latestTag})
  38. if err != nil {
  39. w.WriteHeader(http.StatusInternalServerError)
  40. } else {
  41. w.Header().Add("Content-Type", "text/plain")
  42. }
  43. }
  44. func main() {
  45. var port string
  46. if port = os.Getenv("PORT"); port == "" {
  47. port = "80"
  48. }
  49. http.HandleFunc("/", serve)
  50. http.ListenAndServe(fmt.Sprintf(":%s", port), nil)
  51. }