diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f67c7a2d..a1cdee2c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -245,7 +245,7 @@ jobs: cd clients/android git checkout main - name: Checkout dev branch - if: github.ref == 'refs/heads/dev-next' && github.event_name != 'workflow_dispatch' + if: github.ref == 'refs/heads/dev-next' run: |- cd clients/android git checkout dev @@ -319,7 +319,7 @@ jobs: cd clients/android git checkout main - name: Checkout dev branch - if: github.ref == 'refs/heads/dev-next' && github.event_name != 'workflow_dispatch' + if: github.ref == 'refs/heads/dev-next' run: |- cd clients/android git checkout dev @@ -409,7 +409,7 @@ jobs: cd clients/apple git checkout main - name: Checkout dev branch - if: matrix.if && github.ref == 'refs/heads/dev-next' && github.event_name != 'workflow_dispatch' + if: matrix.if && github.ref == 'refs/heads/dev-next' run: |- cd clients/apple git checkout dev @@ -524,7 +524,7 @@ jobs: path: 'dist' upload: name: Upload builds - if: always() && github.event_name == 'workflow_dispatch' && inputs.build != 'publish-android' + if: always() && github.event_name == 'workflow_dispatch' && (inputs.build == 'All' || inputs.build == 'Binary' || inputs.build == 'Android' || inputs.build == 'Apple' || inputs.build == 'macOS-standalone') runs-on: ubuntu-latest needs: - calculate_version diff --git a/cmd/internal/app_store_connect/main.go b/cmd/internal/app_store_connect/main.go index 08ff1e11..75e00475 100644 --- a/cmd/internal/app_store_connect/main.go +++ b/cmd/internal/app_store_connect/main.go @@ -100,27 +100,76 @@ findVersion: } func publishTestflight(ctx context.Context) error { + tagVersion, err := build_shared.ReadTagVersion() + if err != nil { + return err + } + tag := tagVersion.VersionString() client := createClient() - var buildsToPublish []asc.Build - for _, platform := range []string{ - "IOS", - "MAC_OS", - "TV_OS", + + buildIDsResponse, _, err := client.TestFlight.ListBuildIDsForBetaGroup(ctx, groupID, nil) + if err != nil { + return err + } + buildIDS := common.Map(buildIDsResponse.Data, func(it asc.RelationshipData) string { + return it.ID + }) + for _, platform := range []asc.Platform{ + asc.PlatformIOS, + asc.PlatformMACOS, + asc.PlatformTVOS, } { + log.Info(string(platform), " list builds") builds, _, err := client.Builds.ListBuilds(ctx, &asc.ListBuildsQuery{ FilterApp: []string{appID}, - FilterPreReleaseVersionPlatform: []string{platform}, + FilterPreReleaseVersionPlatform: []string{string(platform)}, }) if err != nil { return err } - buildsToPublish = append(buildsToPublish, builds.Data[0]) - } - _, err := client.TestFlight.AddBuildsToBetaGroup(ctx, groupID, common.Map(buildsToPublish, func(it asc.Build) string { - return it.ID - })) - if err != nil { - return err + log.Info(string(platform), " ", tag, " list localizations") + localizations, _, err := client.TestFlight.ListBetaBuildLocalizationsForBuild(ctx, builds.Data[0].ID, nil) + if err != nil { + return err + } + localization := common.Find(localizations.Data, func(it asc.BetaBuildLocalization) bool { + return *it.Attributes.Locale == "en-US" + }) + if localization.ID == "" { + log.Fatal(string(platform), " ", tag, " no en-US localization found") + } + if localization.Attributes == nil || localization.Attributes.WhatsNew == nil || *localization.Attributes.WhatsNew == "" { + log.Info(string(platform), " ", tag, " update localization") + _, _, err = client.TestFlight.UpdateBetaBuildLocalization(ctx, localization.ID, common.Ptr( + F.ToString("sing-box ", tag), + )) + if err != nil { + return err + } + } + if !common.Contains(buildIDS, builds.Data[0].ID) { + log.Info(string(platform), " ", tag, " publish") + _, err = client.TestFlight.AddBuildsToBetaGroup(ctx, groupID, []string{builds.Data[0].ID}) + if err != nil { + return err + } + } + log.Info(string(platform), " ", tag, " list submissions") + betaSubmissions, _, err := client.TestFlight.ListBetaAppReviewSubmissions(ctx, &asc.ListBetaAppReviewSubmissionsQuery{ + FilterBuild: []string{builds.Data[0].ID}, + }) + if err != nil { + return err + } + if len(betaSubmissions.Data) == 0 { + log.Info(string(platform), " ", tag, " create submission") + _, _, err = client.TestFlight.CreateBetaAppReviewSubmission(ctx, builds.Data[0].ID) + if err != nil { + return err + } + continue + } + } return nil }