Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 43 additions & 25 deletions internal/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -368,34 +368,47 @@ func (g *Git) CommitAndPush(openAPIDocVersion, speakeasyVersion, doc string, act
return "", fmt.Errorf("error getting worktree: %w", err)
}

logging.Info("Commit and pushing changes to git")

if err := g.Add("."); err != nil {
return "", fmt.Errorf("error adding changes: %w", err)
isSigned := ""
if environment.GetSignedCommits() {
isSigned = " (signed)"
}
logging.Info("Commit and pushing changes to git " + isSigned)

var commitMessage string
if action == environment.ActionRunWorkflow {
commitMessage = fmt.Sprintf("ci: regenerated with OpenAPI Doc %s, Speakeasy CLI %s", openAPIDocVersion, speakeasyVersion)
if sourcesOnly {
commitMessage = fmt.Sprintf("ci: regenerated with Speakeasy CLI %s", speakeasyVersion)
}
} else if action == environment.ActionSuggest {
commitMessage = fmt.Sprintf("ci: suggestions for OpenAPI doc %s", doc)
speakeasyVersionSuffix := "(v" + speakeasyVersion + ")"

commits := []struct {
paths []string
msg string
}{
{paths: []string{"**/.speakeasy/", "*gen.yaml", "*gen.lock", "*workflow.yaml", "*workflow.lock"}, msg: "build: Speakeasy config and lock files " + speakeasyVersionSuffix},
{paths: []string{"*.md"}, msg: "docs: regenerate markdown files " + speakeasyVersionSuffix},
{paths: []string{"."}, msg: "feat: regenerate SDK " + speakeasyVersionSuffix},
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will cause the PR description to be feat: regenerate SDK (v1.234.5) when it previously was ci: regenerated with Speakeasy CLI 1.234.5. I personally think the new description is confusing since there are multiple versions with any given SDK:

  • SDK/target version
  • OpenAPI document version
  • Speakeasy version (and even generator version if we're being pedantic about versions)

The target being rebuilt may also not be an SDK. (Terraform and other internal thing I'm working on 😉)

Maybe best to keep it similar to the old message and consider dropping the CLI and version part?

}

// Create commit message
var lastCommitHash plumbing.Hash
if !environment.GetSignedCommits() {
commitHash, err := w.Commit(commitMessage, &git.CommitOptions{
Author: &object.Signature{
Name: "speakeasybot",
Email: "[email protected]",
When: time.Now(),
},
All: true,
})
if err != nil {
return "", fmt.Errorf("error committing changes: %w", err)
var err error

for i, commit := range commits {
for _, path := range commit.paths {
if err = g.Add(path); err != nil {
logging.Info(fmt.Errorf("unable to add changes for %v: %w", path, err).Error())
}
}

commitHash, err := w.Commit(commit.msg, &git.CommitOptions{
Author: &object.Signature{
Name: "speakeasybot",
Email: "[email protected]",
When: time.Now(),
},
AllowEmptyCommits: false,
All: i == len(commits)-1,
})
if err != nil {
logging.Info(fmt.Errorf("unable to commit changes for %v: %w", commit.paths, err).Error())
}
lastCommitHash = commitHash
}

if err := g.repo.Push(&git.PushOptions{
Expand All @@ -404,7 +417,11 @@ func (g *Git) CommitAndPush(openAPIDocVersion, speakeasyVersion, doc string, act
}); err != nil {
return "", pushErr(err)
}
return commitHash.String(), nil
return lastCommitHash.String(), nil
}

if err := g.Add("."); err != nil {
return "", fmt.Errorf("error adding changes: %w", err)
}

branch, err := g.GetCurrentBranch()
Expand Down Expand Up @@ -447,7 +464,7 @@ func (g *Git) CommitAndPush(openAPIDocVersion, speakeasyVersion, doc string, act

// Commit changes
commitResult, _, err := g.client.Git.CreateCommit(context.Background(), owner, repo, &github.Commit{
Message: github.String(commitMessage),
Message: github.String(commits[len(commits)-1].msg),
Tree: &github.Tree{SHA: tree.SHA},
Parents: []*github.Commit{parentCommit}}, &github.CreateCommitOptions{})
if err != nil {
Expand Down Expand Up @@ -520,6 +537,7 @@ func (g *Git) createAndPushTree(ref *github.Reference, sourceFiles git.Status) (
tree, _, err = g.client.Git.CreateTree(context.Background(), owner, repo, *ref.Object.SHA, entries)
return tree, err
}

func (g *Git) Add(arg string) error {
// We execute this manually because go-git doesn't properly support gitignore
cmd := exec.Command("git", "add", arg)
Expand Down
3 changes: 1 addition & 2 deletions testing/pr-mode.env
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
INPUT_MODE="pr"
INPUT_ACTION="generate"
INPUT_LANGUAGES="- go"
GITHUB_REPOSITORY="speakeasy-api/sdk-generation-action-test-repo"
INPUT_FORCE=true
RUN_FINALIZE=true
INPUT_SIGNED_COMMITS=true
INPUT_SIGNED_COMMITS=false
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You okay with this @jagarnica

4 changes: 2 additions & 2 deletions testing/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ENV_FILE=$1

function run_action() {
rm -rf ./repo || true
rm ./bin/speakeasy || true
rm -f ./bin/speakeasy || true
go run main.go
}

Expand All @@ -20,6 +20,6 @@ fi

set -o allexport && source ${ENV_FILE} && set +o allexport

rm output.txt || true
rm -f output.txt
INPUT_ACTION="run-workflow"
run_action
Loading