| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package debtik
- import (
- _ "embed"
- "fmt"
- "os"
- "path/filepath"
- )
- // Embed the helpers so an upgrade launched by a legacy updater also updates
- // its own tooling when the newly installed server starts.
- //
- //go:embed scripts/debtik-update
- var updateHelper []byte
- //go:embed scripts/release-version.py
- var versionHelper []byte
- // RefreshUpdateHelpers refreshes an existing installation, without creating one
- // when the server is run from a development checkout.
- func RefreshUpdateHelpers(dir string) error {
- if _, err := os.Stat(filepath.Join(dir, "debtik-update")); os.IsNotExist(err) {
- return nil
- } else if err != nil {
- return err
- }
- for _, helper := range []struct {
- name string
- data []byte
- }{{"debtik-update", updateHelper}, {"debtik-release-version", versionHelper}} {
- if err := writeHelper(dir, helper.name, helper.data); err != nil {
- return err
- }
- }
- return nil
- }
- func writeHelper(dir, name string, data []byte) error {
- f, err := os.CreateTemp(dir, ".debtik-helper-*")
- if err != nil {
- return err
- }
- defer os.Remove(f.Name())
- if err = f.Chmod(0750); err == nil {
- _, err = f.Write(data)
- }
- if err == nil {
- err = f.Sync()
- }
- closeErr := f.Close()
- if err == nil {
- err = closeErr
- }
- if err == nil {
- err = os.Rename(f.Name(), filepath.Join(dir, name))
- }
- if err != nil {
- return fmt.Errorf("install %s: %w", name, err)
- }
- return nil
- }
|