Skip to content

Commit 5ff6634

Browse files
Merge pull request #141 from arunsathiya/add/flyctl
Add support for flyctl
2 parents 080c5cc + 01c6f85 commit 5ff6634

6 files changed

Lines changed: 190 additions & 0 deletions

File tree

plugins/flyctl/access_token.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package flyctl
2+
3+
import (
4+
"context"
5+
6+
"github.com/1Password/shell-plugins/sdk"
7+
"github.com/1Password/shell-plugins/sdk/importer"
8+
"github.com/1Password/shell-plugins/sdk/provision"
9+
"github.com/1Password/shell-plugins/sdk/schema"
10+
"github.com/1Password/shell-plugins/sdk/schema/credname"
11+
"github.com/1Password/shell-plugins/sdk/schema/fieldname"
12+
)
13+
14+
func AccessToken() schema.CredentialType {
15+
return schema.CredentialType{
16+
Name: credname.AccessToken,
17+
DocsURL: sdk.URL("https://fly.io/docs/flyctl/auth-login/"),
18+
ManagementURL: sdk.URL("https://fly.io/user/personal_access_tokens"),
19+
Fields: []schema.CredentialField{
20+
{
21+
Name: fieldname.Token,
22+
MarkdownDescription: "Token used to authenticate to Fly.io.",
23+
Secret: true,
24+
Composition: &schema.ValueComposition{
25+
Length: 43,
26+
Charset: schema.Charset{
27+
Uppercase: true,
28+
Lowercase: true,
29+
Digits: true,
30+
Symbols: true,
31+
},
32+
},
33+
},
34+
},
35+
DefaultProvisioner: provision.EnvVars(defaultEnvVarMapping),
36+
Importer: importer.TryAll(
37+
importer.TryEnvVarPair(defaultEnvVarMapping),
38+
TryFlyctlConfigFile(),
39+
)}
40+
}
41+
42+
var defaultEnvVarMapping = map[string]sdk.FieldName{
43+
"FLY_ACCESS_TOKEN": fieldname.Token,
44+
}
45+
46+
func TryFlyctlConfigFile() sdk.Importer {
47+
return importer.TryFile("~/.fly/config.yml", func(ctx context.Context, contents importer.FileContents, in sdk.ImportInput, out *sdk.ImportAttempt) {
48+
var config Config
49+
if err := contents.ToYAML(&config); err != nil {
50+
out.AddError(err)
51+
return
52+
}
53+
54+
if config.Token == "" {
55+
return
56+
}
57+
58+
out.AddCandidate(sdk.ImportCandidate{
59+
Fields: map[sdk.FieldName]string{
60+
fieldname.Token: config.Token,
61+
},
62+
})
63+
})
64+
}
65+
66+
type Config struct {
67+
Token string `yaml:"access_token"`
68+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package flyctl
2+
3+
import (
4+
"testing"
5+
6+
"github.com/1Password/shell-plugins/sdk"
7+
"github.com/1Password/shell-plugins/sdk/plugintest"
8+
"github.com/1Password/shell-plugins/sdk/schema/fieldname"
9+
)
10+
11+
func TestAccessTokenProvisioner(t *testing.T) {
12+
plugintest.TestProvisioner(t, AccessToken().DefaultProvisioner, map[string]plugintest.ProvisionCase{
13+
"default": {
14+
ItemFields: map[sdk.FieldName]string{
15+
fieldname.Token: "DtP7HoOPOBHMP6bE5tx3nguB5r2zPpSbg9hlEXAMPLE",
16+
},
17+
ExpectedOutput: sdk.ProvisionOutput{
18+
Environment: map[string]string{
19+
"FLY_ACCESS_TOKEN": "DtP7HoOPOBHMP6bE5tx3nguB5r2zPpSbg9hlEXAMPLE",
20+
},
21+
},
22+
},
23+
})
24+
}
25+
26+
func TestAccessTokenImporter(t *testing.T) {
27+
plugintest.TestImporter(t, AccessToken().Importer, map[string]plugintest.ImportCase{
28+
"environment": {
29+
Environment: map[string]string{
30+
"FLY_ACCESS_TOKEN": "DtP7HoOPOBHMP6bE5tx3nguB5r2zPpSbg9hlEXAMPLE",
31+
},
32+
ExpectedCandidates: []sdk.ImportCandidate{
33+
{
34+
Fields: map[sdk.FieldName]string{
35+
fieldname.Token: "DtP7HoOPOBHMP6bE5tx3nguB5r2zPpSbg9hlEXAMPLE",
36+
},
37+
},
38+
},
39+
},
40+
"config file": {
41+
Files: map[string]string{
42+
"~/.fly/config.yml": plugintest.LoadFixture(t, "config.yml"),
43+
},
44+
ExpectedCandidates: []sdk.ImportCandidate{
45+
{
46+
Fields: map[sdk.FieldName]string{
47+
fieldname.Token: "DtP7HoOPOBHMP6bE5tx3nguB5r2zPpSbg9hlEXAMPLE",
48+
},
49+
},
50+
},
51+
},
52+
})
53+
}

plugins/flyctl/fly.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package flyctl
2+
3+
import (
4+
"github.com/1Password/shell-plugins/sdk"
5+
"github.com/1Password/shell-plugins/sdk/needsauth"
6+
"github.com/1Password/shell-plugins/sdk/schema"
7+
"github.com/1Password/shell-plugins/sdk/schema/credname"
8+
)
9+
10+
func FlyCLI() schema.Executable {
11+
return schema.Executable{
12+
Name: "Fly",
13+
Runs: []string{"fly"},
14+
DocsURL: sdk.URL("https://fly.io/docs/flyctl/"),
15+
NeedsAuth: needsauth.NotForHelpOrVersion(),
16+
Uses: []schema.CredentialUsage{
17+
{
18+
Name: credname.AccessToken,
19+
},
20+
},
21+
}
22+
}

plugins/flyctl/flyctl.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package flyctl
2+
3+
import (
4+
"github.com/1Password/shell-plugins/sdk"
5+
"github.com/1Password/shell-plugins/sdk/needsauth"
6+
"github.com/1Password/shell-plugins/sdk/schema"
7+
"github.com/1Password/shell-plugins/sdk/schema/credname"
8+
)
9+
10+
func FlyctlCLI() schema.Executable {
11+
return schema.Executable{
12+
Name: "Flyctl",
13+
Runs: []string{"flyctl"},
14+
DocsURL: sdk.URL("https://fly.io/docs/flyctl/"),
15+
NeedsAuth: needsauth.NotForHelpOrVersion(),
16+
Uses: []schema.CredentialUsage{
17+
{
18+
Name: credname.AccessToken,
19+
},
20+
},
21+
}
22+
}

plugins/flyctl/plugin.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package flyctl
2+
3+
import (
4+
"github.com/1Password/shell-plugins/sdk"
5+
"github.com/1Password/shell-plugins/sdk/schema"
6+
)
7+
8+
func New() schema.Plugin {
9+
return schema.Plugin{
10+
Name: "flyctl",
11+
Platform: schema.PlatformInfo{
12+
Name: "Fly.io",
13+
Homepage: sdk.URL("https://fly.io"),
14+
},
15+
Credentials: []schema.CredentialType{
16+
AccessToken(),
17+
},
18+
Executables: []schema.Executable{
19+
FlyctlCLI(),
20+
FlyCLI(),
21+
},
22+
}
23+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
access_token: DtP7HoOPOBHMP6bE5tx3nguB5r2zPpSbg9hlEXAMPLE
2+
wire_guard_state: {}

0 commit comments

Comments
 (0)