~emersion/yojo

f8a05af3bc6da30b416aa7ca3eed2a5e31661d0a — Simon Ser 25 days ago 6b9d6ae
Gracefully handle gitea.NewClient errors
2 files changed, 35 insertions(+), 10 deletions(-)

M job.go
M main.go
M job.go => job.go +4 -1
@@ 20,9 20,12 @@ func handleCommit(ctx context.Context, event *giteaCommitEvent, installation *In
	srhtClient := newSrhtClient(&oauth2.TokenResp{
		AccessToken: installation.SrhtAccessToken,
	})
	giteaClient := newGiteaClient(ctx, installation.GiteaEndpoint, &oauth2.TokenResp{
	giteaClient, err := newGiteaClient(ctx, installation.GiteaEndpoint, &oauth2.TokenResp{
		AccessToken: installation.GiteaAccessToken,
	})
	if err != nil {
		return fmt.Errorf("failed to create Gitea client: %v", err)
	}

	manifest, err := fetchManifest(giteaClient, event.Repository.Owner.Username, event.Repository.Name, event.HeadCommit.ID)
	if err != nil {

M main.go => main.go +31 -9
@@ 180,7 180,12 @@ func main() {

	handleDashboard := func(w http.ResponseWriter, r *http.Request) {
		sessionData := sessionFromContext(r.Context()).Load()
		giteaClient := newGiteaClient(r.Context(), sessionData.GiteaEndpoint, sessionData.GiteaToken)
		giteaClient, err := newGiteaClient(r.Context(), sessionData.GiteaEndpoint, sessionData.GiteaToken)
		if err != nil {
			http.Error(w, fmt.Sprintf("failed to create Gitea client: %v", err), http.StatusInternalServerError)
			return
		}

		repos, _, err := giteaClient.ListMyRepos(gitea.ListReposOptions{})
		if err != nil {
			http.Error(w, fmt.Sprintf("failed to list Gitea repositories: %v", err), http.StatusInternalServerError)


@@ 275,7 280,12 @@ func main() {
			}
		}

		giteaClient := newGiteaClient(r.Context(), endpoint, tokenResp)
		giteaClient, err := newGiteaClient(r.Context(), endpoint, tokenResp)
		if err != nil {
			http.Error(w, fmt.Sprintf("failed to create Gitea client: %v", err), http.StatusInternalServerError)
			return
		}

		user, _, err := giteaClient.GetMyUserInfo()
		if err != nil {
			http.Error(w, fmt.Sprintf("failed to fetch Gitea profile: %v", err), http.StatusBadRequest)


@@ 299,7 309,11 @@ func main() {
		}

		sessionData := sessionFromContext(r.Context()).Load()
		giteaClient := newGiteaClient(r.Context(), sessionData.GiteaEndpoint, sessionData.GiteaToken)
		giteaClient, err := newGiteaClient(r.Context(), sessionData.GiteaEndpoint, sessionData.GiteaToken)
		if err != nil {
			http.Error(w, fmt.Sprintf("failed to create Gitea client: %v", err), http.StatusInternalServerError)
			return
		}

		repo, _, err := giteaClient.GetRepoByID(repoID)
		if err != nil {


@@ 442,13 456,15 @@ func newSrhtClient(tokenResp *oauth2.TokenResp) *gqlclient.Client {
	return gqlclient.New(buildssrhtEndpoint+"/query", httpClient)
}

func newGiteaClient(ctx context.Context, endpoint string, tokenResp *oauth2.TokenResp) *gitea.Client {
func newGiteaClient(ctx context.Context, endpoint string, tokenResp *oauth2.TokenResp) (*gitea.Client, error) {
	httpClient := giteaAuth.NewHTTPClient(tokenResp)
	giteaClient, err := gitea.NewClient(endpoint, gitea.SetHTTPClient(httpClient), gitea.SetContext(ctx))
	if err != nil {
		panic(fmt.Errorf("failed to create Gitea client: %v", err))
		// This can happen on invalid token, because the library checks the
		// server version
		return nil, err
	}
	return giteaClient
	return giteaClient, nil
}

func listHooks(giteaClient *gitea.Client, owner, repo, origin string) ([]*gitea.Hook, error) {


@@ 471,7 487,10 @@ func listHooks(giteaClient *gitea.Client, owner, repo, origin string) ([]*gitea.

func enableRepo(ctx context.Context, db *DB, owner, repo, origin string) error {
	sessionData := sessionFromContext(ctx).Load()
	giteaClient := newGiteaClient(ctx, sessionData.GiteaEndpoint, sessionData.GiteaToken)
	giteaClient, err := newGiteaClient(ctx, sessionData.GiteaEndpoint, sessionData.GiteaToken)
	if err != nil {
		return fmt.Errorf("failed to create Gitea client: %v", err)
	}

	installation := &Installation{
		SrhtUsername:     sessionData.SrhtUsername,


@@ 484,7 503,7 @@ func enableRepo(ctx context.Context, db *DB, owner, repo, origin string) error {
		return fmt.Errorf("failed to store installation into DB: %v", err)
	}

	_, _, err := giteaClient.CreateRepoHook(owner, repo, gitea.CreateHookOption{
	_, _, err = giteaClient.CreateRepoHook(owner, repo, gitea.CreateHookOption{
		Type: gitea.HookTypeGitea,
		Config: map[string]string{
			"url":          origin + "/webhook?installation_token=" + installation.WebhookToken,


@@ 504,7 523,10 @@ func enableRepo(ctx context.Context, db *DB, owner, repo, origin string) error {

func disableRepo(ctx context.Context, owner, repo, origin string) error {
	sessionData := sessionFromContext(ctx).Load()
	giteaClient := newGiteaClient(ctx, sessionData.GiteaEndpoint, sessionData.GiteaToken)
	giteaClient, err := newGiteaClient(ctx, sessionData.GiteaEndpoint, sessionData.GiteaToken)
	if err != nil {
		return fmt.Errorf("failed to create Gitea client: %v", err)
	}

	hooks, err := listHooks(giteaClient, owner, repo, origin)
	if err != nil {