Skip to content

Commit 5b9e9a5

Browse files
authored
Add docs upload command (#393)
1 parent 51a3a96 commit 5b9e9a5

2 files changed

Lines changed: 69 additions & 0 deletions

File tree

internal/cmd/provider/provider.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,25 @@ func Command() cmd.Command {
177177
},
178178
},
179179
},
180+
{
181+
Category: "Version management",
182+
Name: "upload-docs",
183+
Usage: "Upload documentation for a provider version",
184+
Versions: []cmd.VersionedCommand{
185+
{
186+
EarliestVersion: cmd.SupportedVersionAll,
187+
Command: &cli.Command{
188+
Flags: []cli.Flag{
189+
flagRequiredVersionID,
190+
flagDocsArchive,
191+
},
192+
Action: uploadDocs(),
193+
Before: authenticated.Ensure,
194+
ArgsUsage: cmd.EmptyArgsUsage,
195+
},
196+
},
197+
},
198+
},
180199
},
181200
}
182201
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package provider
2+
3+
import (
4+
"context"
5+
"encoding/base64"
6+
"fmt"
7+
"os"
8+
9+
"github.com/shurcooL/graphql"
10+
"github.com/urfave/cli/v3"
11+
12+
"github.com/spacelift-io/spacectl/internal/cmd/authenticated"
13+
"github.com/spacelift-io/spacectl/internal/cmd/provider/internal"
14+
)
15+
16+
var flagDocsArchive = &cli.StringFlag{
17+
Name: "docs-archive",
18+
Usage: "[Required] Path to a gzipped tar archive containing the documentation",
19+
Required: true,
20+
}
21+
22+
func uploadDocs() cli.ActionFunc {
23+
return func(ctx context.Context, cliCmd *cli.Command) error {
24+
versionID := cliCmd.String(flagRequiredVersionID.Name)
25+
archivePath := cliCmd.String(flagDocsArchive.Name)
26+
27+
data, err := os.ReadFile(archivePath)
28+
if err != nil {
29+
return fmt.Errorf("could not read docs archive: %w", err)
30+
}
31+
32+
encoded := base64.StdEncoding.EncodeToString(data)
33+
34+
var mutation struct {
35+
UploadDocs internal.Version `graphql:"terraformProviderVersionUploadDocs(version: $version, archive: $archive)"`
36+
}
37+
38+
variables := map[string]any{
39+
"version": graphql.ID(versionID),
40+
"archive": graphql.String(encoded),
41+
}
42+
43+
if err := authenticated.Client().Mutate(ctx, &mutation, variables); err != nil {
44+
return fmt.Errorf("could not upload docs for provider version: %w", err)
45+
}
46+
47+
fmt.Printf("Documentation uploaded for provider version %s\n", mutation.UploadDocs.Number)
48+
return nil
49+
}
50+
}

0 commit comments

Comments
 (0)