| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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
- //go:embed scripts/install-dependencies.sh
- var dependenciesHelper []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},
- {"debtik-install-dependencies", dependenciesHelper},
- } {
- 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
- }
|