diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 6a58e14..2c2e113 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Import Secrets id: import-secrets - uses: hashicorp/vault-action@v2 + uses: https://git.mthie.com/mthie/vault-action@v0 with: url: ${{ env.VAULT_ADDR }} method: ${{ env.VAULT_AUTH_TYPE}} diff --git a/action.yml b/action.yml index 97e8637..6754002 100644 --- a/action.yml +++ b/action.yml @@ -22,4 +22,4 @@ inputs: required: false runs: using: 'go' - main: 'main.go' + main: 'cmd/main.go' diff --git a/cmd/go.mod b/cmd/go.mod new file mode 100644 index 0000000..9630c4b --- /dev/null +++ b/cmd/go.mod @@ -0,0 +1,3 @@ +module git.mthie.com/mthie/vault-action/cmd + +go 1.21.1 diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..e97e240 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,66 @@ +package main + +import ( + "context" + "encoding/json" + "io" + "log" + "net/http" + "os" + "os/exec" +) + +func main() { + req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, "https://git.mthie.com/api/v1/repos/mthie/vault-action/releases", nil) + if err != nil { + log.Panicf("error creating download request: %s", err) + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + log.Panicf("error getting download information: %s", err) + } + + type releaseInfo []struct { + Assets []struct { + URL string `json:"browser_download_url"` + } `json:"assets"` + } + + downloadData := releaseInfo{} + if err := json.NewDecoder(resp.Body).Decode(&downloadData); err != nil { + log.Panicf("error decoding release information: %s", err) + } + + resp.Body.Close() + + if len(downloadData) == 0 || len(downloadData[0].Assets) == 0 { + log.Panic("no binary found") + } + + req, err = http.NewRequestWithContext(context.Background(), http.MethodGet, downloadData[0].Assets[0].URL, nil) + if err != nil { + log.Panicf("error creating download request: %s", err) + } + + resp, err = http.DefaultClient.Do(req) + if err != nil { + log.Panicf("error downloading binary: %s", err) + } + out, err := os.OpenFile("vault", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) + if err != nil { + log.Panicf("error creating file: %s", err) + } + + if _, err = io.Copy(out, resp.Body); err != nil { + log.Panicf("error writing download data: %s", err) + } + + out.Close() + resp.Body.Close() + + cmd := exec.Command("vault") + if err := cmd.Run(); err != nil { + log.Panicf("error executing: %s", err) + } +} diff --git a/cmd/tmp.txt b/cmd/tmp.txt new file mode 100644 index 0000000..71e3c43 --- /dev/null +++ b/cmd/tmp.txt @@ -0,0 +1,8 @@ +DEPLOY_KEY<<_GitHubActionsFileCommandDelimeter_ +-----BEGIN EC PRIVATE KEY----- +MIGkAgEBBDB7OBLldAAcXseFvIF4DOBfLdaiQtUUnGU8UddpoUeCCGe/lwsMQzns +U0mOdkGAWwygBwYFK4EEACKhZANiAAQC8rWLLnxti4P4YpmAyb6xsD8Uv8ZKM7qJ +N6Lh2JqttfFp03s5fSjWIibDjwCBGqSTBitFU1YcJvc9ewWUOxHrta782GChVgjl +loezmUvX1oLCE0Koqd/U+fJnyC+LvJA= +-----END EC PRIVATE KEY----- +_GitHubActionsFileCommandDelimeter_ diff --git a/cmd/vault b/cmd/vault new file mode 100755 index 0000000..929ce2a Binary files /dev/null and b/cmd/vault differ