diff --git a/internal/cli/acul_app_scaffolding.go b/internal/cli/acul_app_scaffolding.go index a0c4bc50d..a711a7cfc 100644 --- a/internal/cli/acul_app_scaffolding.go +++ b/internal/cli/acul_app_scaffolding.go @@ -51,6 +51,8 @@ type Metadata struct { Description string `json:"description"` } +const stableACULVersion = "v2.0.1" + // loadManifest downloads and parses the manifest.json for the latest release. func loadManifest(tag string) (*Manifest, error) { client := &http.Client{Timeout: 15 * time.Second} @@ -175,7 +177,12 @@ func runScaffold(cli *cli, cmd *cobra.Command, args []string, inputs *struct { latestTag, err := getLatestReleaseTag() if err != nil { - return fmt.Errorf("failed to get latest release tag: %w", err) + cli.renderer.Warnf( + "Unable to check the latest ACUL version (%v). Falling back to stable version %q.", + err, + stableACULVersion, + ) + latestTag = stableACULVersion } manifest, err := loadManifest(latestTag) @@ -204,7 +211,7 @@ func runScaffold(cli *cli, cmd *cobra.Command, args []string, inputs *struct { return fmt.Errorf("failed to create project dir: %w", err) } - tempUnzipDir, err := downloadAndUnzipSampleRepo() + tempUnzipDir, err := downloadAndUnzipSampleRepo(latestTag) if err != nil { return err } @@ -342,12 +349,7 @@ func getDestDir(args []string) string { return args[0] } -func downloadAndUnzipSampleRepo() (string, error) { - latestTag, err := getLatestReleaseTag() - if err != nil { - return "", fmt.Errorf("failed to get latest release tag: %w", err) - } - +func downloadAndUnzipSampleRepo(latestTag string) (string, error) { repoURL := fmt.Sprintf("https://github.com/auth0-samples/auth0-acul-samples/archive/refs/tags/%s.zip", latestTag) tempZipFile, err := downloadFile(repoURL) if err != nil { diff --git a/internal/cli/acul_screen_scaffolding.go b/internal/cli/acul_screen_scaffolding.go index d79adf4bd..471130407 100644 --- a/internal/cli/acul_screen_scaffolding.go +++ b/internal/cli/acul_screen_scaffolding.go @@ -62,24 +62,20 @@ func aculScreenAddCmd(cli *cli) *cobra.Command { // checkVersionCompatibility compares the user's ACUL config version with the latest available tag // and warns if the project version is missing or outdated. -func checkVersionCompatibility(cli *cli, aculConfig *AculConfig, latestTag string) { +func checkVersionCompatibility(cli *cli, aculConfig *AculConfig) { + latestTag, err := getLatestReleaseTag() + cli.renderer.Warnf( + ansi.Yellow(fmt.Sprintf("Unable to check for the latest ACUL version (%v).Skipping version check and continuing with the configured version.", err))) + if aculConfig.AppVersion == "" { - cli.renderer.Warnf( - ansi.Yellow("⚠️ Missing app version in acul_config.json. Reinitialize your project with `auth0 acul init`."), - ) + cli.renderer.Warnf(ansi.Yellow("⚠️ Missing app version in acul_config.json. Reinitialize your project with `auth0 acul init`.")) return } if aculConfig.AppVersion != latestTag { - compareLink := fmt.Sprintf( - "https://github.com/auth0-samples/auth0-acul-samples/compare/%s...%s", - aculConfig.AppVersion, latestTag, - ) + compareLink := fmt.Sprintf("https://github.com/auth0-samples/auth0-acul-samples/compare/%s...%s", aculConfig.AppVersion, latestTag) - cli.renderer.Warnf( - ansi.Yellow(fmt.Sprintf("⚠️ ACUL project version outdated (%s). Check updates: %s", - aculConfig.AppVersion, compareLink)), - ) + cli.renderer.Warnf(ansi.Yellow(fmt.Sprintf("⚠️ ACUL project version outdated (%s). Check updates: %s", aculConfig.AppVersion, compareLink))) } } @@ -95,24 +91,19 @@ func scaffoldAddScreen(cli *cli, args []string, destDir string) error { return err } - latestTag, err := getLatestReleaseTag() - if err != nil { - return fmt.Errorf("failed to get latest release tag: %w", err) - } - manifest, err := loadManifest(aculConfig.AppVersion) if err != nil { return err } - checkVersionCompatibility(cli, aculConfig, latestTag) + checkVersionCompatibility(cli, aculConfig) selectedScreens, err := selectAndFilterScreens(cli, args, manifest, aculConfig.ChosenTemplate, aculConfig.Screens) if err != nil { return err } - if err = addScreensToProject(cli, destDir, aculConfig.ChosenTemplate, selectedScreens, manifest.Templates[aculConfig.ChosenTemplate]); err != nil { + if err = addScreensToProject(cli, destDir, aculConfig, selectedScreens, manifest.Templates[aculConfig.ChosenTemplate]); err != nil { return err } @@ -164,8 +155,8 @@ func selectAndFilterScreens(cli *cli, args []string, manifest *Manifest, chosenT return finalScreens, nil } -func addScreensToProject(cli *cli, destDir, chosenTemplate string, selectedScreens []string, selectedTemplate Template) error { - tempUnzipDir, err := downloadAndUnzipSampleRepo() +func addScreensToProject(cli *cli, destDir string, aculConfig *AculConfig, selectedScreens []string, selectedTemplate Template) error { + tempUnzipDir, err := downloadAndUnzipSampleRepo(aculConfig.AppVersion) if err != nil { return err } @@ -176,7 +167,7 @@ func addScreensToProject(cli *cli, destDir, chosenTemplate string, selectedScree return fmt.Errorf("failed to find extracted directory: %w", err) } - sourcePathPrefix := filepath.Join(extractedDir, chosenTemplate) + sourcePathPrefix := filepath.Join(extractedDir, aculConfig.ChosenTemplate) var sourceRoot = filepath.Join(tempUnzipDir, sourcePathPrefix) var destRoot = destDir @@ -206,7 +197,7 @@ func addScreensToProject(cli *cli, destDir, chosenTemplate string, selectedScree return fmt.Errorf("error copying missing files: %w", err) } - return copyProjectScreens(cli, selectedTemplate.Screens, selectedScreens, chosenTemplate, tempUnzipDir, destDir) + return copyProjectScreens(cli, selectedTemplate.Screens, selectedScreens, aculConfig.ChosenTemplate, tempUnzipDir, destDir) } func handleEditedFiles(cli *cli, edited []string, sourceRoot, destRoot string) error {