Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
5 changes: 0 additions & 5 deletions internal/cli/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,6 @@ func Run(sourcesOnly bool, installationURLs map[string]string, repoURL string, r
args = append(args, "--set-version", environment.SetVersion())
}

// If we are in PR mode we skip testing on generation, this should run as a PR check
if environment.SkipTesting() || (environment.GetMode() == environment.ModePR && !sourcesOnly) {
args = append(args, "--skip-testing")
}

if environment.ForceGeneration() {
fmt.Println("\nforce input enabled - setting SPEAKEASY_FORCE_GENERATION=true")
os.Setenv("SPEAKEASY_FORCE_GENERATION", "true")
Expand Down
71 changes: 47 additions & 24 deletions internal/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -368,34 +368,52 @@ 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,
})
var err error

err = w.Reset(&git.ResetOptions{Mode: git.SoftReset})
if err != nil {
return "", fmt.Errorf("error committing changes: %w", err)
return "", fmt.Errorf("error resetting: %w", err)
}

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 +422,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 +469,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 +542,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
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