Skip to content

Commit 2530560

Browse files
committed
chore: make --add an option instead of a command
1 parent 014738c commit 2530560

File tree

4 files changed

+56
-60
lines changed

4 files changed

+56
-60
lines changed

internal/add/add.go

-45
This file was deleted.

internal/publish/pgp.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package publish
22

33
import (
44
"crypto"
5-
"encoding/hex"
65
"fmt"
76
"io"
87

@@ -30,10 +29,8 @@ func newSigner(keychain io.Reader) (*signer, error) {
3029
if err != nil {
3130
return nil, err
3231
}
33-
switch key := pkt.(type) {
34-
case *packet.PrivateKey:
32+
if key, ok := pkt.(*packet.PrivateKey); ok {
3533
if !key.IsSubkey && key.PublicKey.PublicKey != nil {
36-
fmt.Println("private", hex.EncodeToString(key.PublicKey.Fingerprint[:]), key.IsSubkey)
3734
s.keys = append(s.keys, key)
3835
}
3936
}

internal/publish/publish.go

+54-4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
11
package publish
22

33
import (
4+
"errors"
45
"fmt"
6+
"log/slog"
57
"os"
68
"path/filepath"
9+
10+
"pault.ag/go/debian/deb"
711
)
812

913
type CLI struct {
10-
Dists string `arg:"" required:"" help:"Path to dists directory" type:"existingdir" env:"EZAPT_DISTS"`
11-
KeepVersions int `help:"Number of versions to keep" default:"2" env:"EZAPT_KEEP_VERSIONS"`
12-
Keyring string `required:"" help:"Path to GPG keyring" type:"existingfile" env:"EZAPT_KEYRING"`
13-
SignUser []string `help:"GPG user to sign with" env:"EZAPT_SIGN_USER" default:"37C84554E7E0A261E4F76E1ED26E6ED000654A3E,FBA2E162F2F44657B38F0309E5665F9BD5970C47"`
14+
Dists string `required:"" help:"Path to dists directory" type:"existingdir" env:"EZAPT_DISTS"`
15+
KeepVersions int `help:"Number of versions to keep" default:"2" env:"EZAPT_KEEP_VERSIONS"`
16+
Keyring string `required:"" help:"Path to GPG keyring" type:"existingfile" env:"EZAPT_KEYRING"`
17+
Add string `help:"Path to packages to add" type:"existingdir" env:"EZAPT_ADD"`
1418
}
1519

1620
func (c *CLI) Run() error {
21+
if c.Add != "" {
22+
if err := c.add(); err != nil {
23+
return fmt.Errorf("add: %w", err)
24+
}
25+
}
26+
1727
pkgs, err := scanPackages(c.Dists)
1828
if err != nil {
1929
return fmt.Errorf("publish: %w", err)
@@ -50,3 +60,43 @@ func (c *CLI) Run() error {
5060

5161
return nil
5262
}
63+
64+
func (c *CLI) add() error {
65+
return filepath.Walk(c.Add, func(path string, info os.FileInfo, err error) error {
66+
if err != nil {
67+
return err
68+
}
69+
if info.IsDir() {
70+
return nil
71+
}
72+
if filepath.Ext(path) != ".deb" {
73+
return nil
74+
}
75+
76+
deb, cl, err := deb.LoadFile(path)
77+
if err != nil {
78+
return err
79+
}
80+
defer cl()
81+
82+
// If we have foo/syncthing/candidate/whatever.deb, grab the
83+
// syncthing/candidate part
84+
repoPath, err := filepath.Rel(c.Add, path)
85+
if err != nil {
86+
return err
87+
}
88+
repoPath = filepath.Dir(repoPath)
89+
90+
newPath := filepath.Join(c.Dists, repoPath, "binary-"+deb.Control.Architecture.String(), filepath.Base(path))
91+
slog.Info("Adding package", "package", deb.Control.Package, "version", deb.Control.Version, "architecture", deb.Control.Architecture, "to", newPath)
92+
if err := os.MkdirAll(filepath.Dir(newPath), 0o700); err != nil {
93+
return err
94+
}
95+
if err := os.Link(path, newPath); errors.Is(err, os.ErrExist) {
96+
// never mind
97+
} else if err != nil {
98+
return err
99+
}
100+
return nil
101+
})
102+
}

main.go

+1-7
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,11 @@ import (
44
"log/slog"
55

66
"github.com/alecthomas/kong"
7-
"kastelo.dev/ezapt/internal/add"
87
"kastelo.dev/ezapt/internal/publish"
98
)
109

11-
type CLI struct {
12-
Publish publish.CLI `cmd:"" help:"Publish packages to a repository."`
13-
Add add.CLI `cmd:"" help:"Add packages to a repository."`
14-
}
15-
1610
func main() {
17-
var cli CLI
11+
var cli publish.CLI
1812
ctx := kong.Parse(&cli)
1913
if err := ctx.Run(); err != nil {
2014
slog.Error("Failed to run", "error", err)

0 commit comments

Comments
 (0)