Add support for staging and purging
This commit is contained in:
77
cmds/updatemgr/update.go
Normal file
77
cmds/updatemgr/update.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(updateCmd)
|
||||
}
|
||||
|
||||
var updateCmd = &cobra.Command{
|
||||
Use: "update",
|
||||
Short: "Update scans the specified directory and registry the index and symlink structure",
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: update,
|
||||
}
|
||||
|
||||
func update(cmd *cobra.Command, args []string) error {
|
||||
err := scanStorage()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Export versions.
|
||||
betaData, err := json.MarshalIndent(exportSelected(true), "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
stableData, err := json.MarshalIndent(exportSelected(false), "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Build destination paths.
|
||||
betaIndexFilePath := filepath.Join(registry.StorageDir().Path, "beta.json")
|
||||
stableIndexFilePath := filepath.Join(registry.StorageDir().Path, "stable.json")
|
||||
|
||||
// Print previews.
|
||||
fmt.Printf("beta (%s):\n", betaIndexFilePath)
|
||||
fmt.Println(string(betaData))
|
||||
fmt.Printf("\nstable: (%s)\n", stableIndexFilePath)
|
||||
fmt.Println(string(stableData))
|
||||
|
||||
// Ask for confirmation.
|
||||
if !confirm("\nDo you want to write these new indexes (and update latest symlinks)?") {
|
||||
fmt.Println("aborted...")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Write indexes.
|
||||
err = ioutil.WriteFile(betaIndexFilePath, betaData, 0o644) //nolint:gosec // 0644 is intended
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("written %s\n", betaIndexFilePath)
|
||||
|
||||
err = ioutil.WriteFile(stableIndexFilePath, stableData, 0o644) //nolint:gosec // 0644 is intended
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("written %s\n", stableIndexFilePath)
|
||||
|
||||
// Create symlinks to latest stable versions.
|
||||
symlinksDir := registry.StorageDir().ChildDir("latest", 0o755)
|
||||
err = registry.CreateSymlinks(symlinksDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("updated stable symlinks in %s\n", symlinksDir.Path)
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user