@codedrifters/configulator 0.0.95 → 0.0.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.mjs CHANGED
@@ -337,7 +337,10 @@ var _TurboRepo = class _TurboRepo extends Component2 {
337
337
  }
338
338
  }
339
339
  activateBranchNameEnvVar() {
340
- this.addGlobalEnvVar("BRANCH_NAME", "$(git rev-parse --abbrev-ref HEAD)");
340
+ this.addGlobalEnvVar(
341
+ "BRANCH_NAME",
342
+ "${BRANCH_NAME:-$(git rev-parse --abbrev-ref HEAD)}"
343
+ );
341
344
  }
342
345
  preSynthesize() {
343
346
  let nextDependsOn = this.project.deps.all.filter((d) => d.version === "workspace:*").map((d) => [d.name, ROOT_TURBO_TASK_NAME].join("#"));
@@ -394,6 +397,9 @@ var _TurboRepo = class _TurboRepo extends Component2 {
394
397
  };
395
398
  _TurboRepo.buildWorkflowOptions = (remoteCacheOptions) => {
396
399
  return {
400
+ env: {
401
+ BRANCH_NAME: "${{ github.head_ref || github.ref_name }}"
402
+ },
397
403
  permissions: {
398
404
  contents: JobPermission.WRITE,
399
405
  idToken: JobPermission.WRITE
@@ -644,6 +650,99 @@ var AwsDeploymentTarget = class _AwsDeploymentTarget extends Component4 {
644
650
  }
645
651
  };
646
652
 
653
+ // src/latest-eligible-version.ts
654
+ var NPM_REGISTRY = "https://registry.npmjs.org";
655
+ function isPrerelease(version) {
656
+ const v = version.replace(/^v/, "");
657
+ return /^\d+\.\d+\.\d+-/.test(v);
658
+ }
659
+ function compareVersions(a, b) {
660
+ const parse = (v) => {
661
+ const parts = v.replace(/^v/, "").split(/[-+]/)[0].split(".");
662
+ return parts.map((p) => {
663
+ const n = parseInt(p, 10);
664
+ return Number.isNaN(n) ? 0 : n;
665
+ });
666
+ };
667
+ const pa = parse(a);
668
+ const pb = parse(b);
669
+ const len = Math.max(pa.length, pb.length);
670
+ for (let i = 0; i < len; i++) {
671
+ const na = pa[i] ?? 0;
672
+ const nb = pb[i] ?? 0;
673
+ if (na !== nb) return na - nb;
674
+ }
675
+ return 0;
676
+ }
677
+ async function getLatestEligibleVersion(packageName, minimumReleaseAgeMinutes) {
678
+ const url = `${NPM_REGISTRY}/${encodeURIComponent(packageName)}`;
679
+ let res;
680
+ try {
681
+ res = await fetch(url, {
682
+ headers: { Accept: "application/json" }
683
+ });
684
+ } catch {
685
+ return null;
686
+ }
687
+ if (!res.ok) return null;
688
+ let data;
689
+ try {
690
+ data = await res.json();
691
+ } catch {
692
+ return null;
693
+ }
694
+ const time = data.time;
695
+ if (!time || typeof time !== "object") return null;
696
+ const nowMs = Date.now();
697
+ const minAgeMs = minimumReleaseAgeMinutes * 60 * 1e3;
698
+ const distTagLatest = data["dist-tags"]?.latest;
699
+ if (distTagLatest && !isPrerelease(distTagLatest)) {
700
+ const publishedAtStr = time[distTagLatest];
701
+ if (typeof publishedAtStr === "string") {
702
+ const publishedAt = Date.parse(publishedAtStr);
703
+ if (!Number.isNaN(publishedAt) && nowMs - publishedAt >= minAgeMs) {
704
+ return distTagLatest;
705
+ }
706
+ } else {
707
+ return distTagLatest;
708
+ }
709
+ }
710
+ const versionTimestamps = [];
711
+ for (const [key, value] of Object.entries(time)) {
712
+ if (key === "created" || key === "modified" || typeof value !== "string") {
713
+ continue;
714
+ }
715
+ if (isPrerelease(key)) continue;
716
+ const publishedAt = Date.parse(value);
717
+ if (Number.isNaN(publishedAt)) continue;
718
+ const ageMs = nowMs - publishedAt;
719
+ if (ageMs >= minAgeMs) {
720
+ versionTimestamps.push({ version: key, publishedAt });
721
+ }
722
+ }
723
+ if (versionTimestamps.length === 0) return null;
724
+ let candidates = versionTimestamps;
725
+ if (distTagLatest && !isPrerelease(distTagLatest)) {
726
+ candidates = versionTimestamps.filter(
727
+ (e) => compareVersions(e.version, distTagLatest) <= 0
728
+ );
729
+ }
730
+ if (candidates.length === 0) return null;
731
+ candidates.sort((a, b) => compareVersions(b.version, a.version));
732
+ return candidates[0].version;
733
+ }
734
+
735
+ // src/version-package-map.ts
736
+ var VERSION_NPM_PACKAGES = [
737
+ { key: "AWS_CDK_CLI_VERSION", npmPackage: "aws-cdk" },
738
+ { key: "AWS_CDK_LIB_VERSION", npmPackage: "aws-cdk-lib" },
739
+ { key: "AWS_CONSTRUCTS_VERSION", npmPackage: "constructs" },
740
+ { key: "PNPM_VERSION", npmPackage: "pnpm" },
741
+ { key: "PROJEN_VERSION", npmPackage: "projen" },
742
+ { key: "TURBO_VERSION", npmPackage: "turbo" }
743
+ ];
744
+ var VERSION_KEYS_SKIP = ["NODE_WORKFLOWS"];
745
+
647
746
  // src/versions.ts
648
747
  var VERSION = {
649
748
  /**
@@ -767,7 +866,7 @@ var PnpmWorkspace = class _PnpmWorkspace extends Component6 {
767
866
  super(project);
768
867
  project.tryFindObjectFile("package.json")?.addDeletionOverride("pnpm");
769
868
  this.fileName = options.fileName ?? "pnpm-workspace.yaml";
770
- this.minimumReleaseAge = options.minimumReleaseAge ? options.minimumReleaseAge : MIMIMUM_RELEASE_AGE.ONE_DAY;
869
+ this.minimumReleaseAge = options.minimumReleaseAge ?? MIMIMUM_RELEASE_AGE.ONE_DAY;
771
870
  this.minimumReleaseAgeExclude = options.minimumReleaseAgeExclude ? ["@codedrifters/*", ...options.minimumReleaseAgeExclude] : ["@codedrifters/*"];
772
871
  this.onlyBuiltDependencies = options.onlyBuiltDependencies ? options.onlyBuiltDependencies : [];
773
872
  this.ignoredBuiltDependencies = options.ignoredBuiltDependencies ? options.ignoredBuiltDependencies : [];
@@ -1215,8 +1314,14 @@ var MonorepoProject = class extends TypeScriptAppProject {
1215
1314
  packageManager: NodePackageManager2.PNPM,
1216
1315
  /**
1217
1316
  * Some additional pre-build steps if we're using turbo's remote cache.
1317
+ * Set BRANCH_NAME so Turborepo remote cache hashes match between local and CI.
1218
1318
  */
1219
1319
  buildWorkflowOptions: {
1320
+ env: {
1321
+ BRANCH_NAME: "${{ github.head_ref || github.ref_name }}",
1322
+ ...buildWorkflowOptions?.env,
1323
+ ...userOptions.buildWorkflowOptions?.env
1324
+ },
1220
1325
  permissions: {
1221
1326
  ...buildWorkflowOptions?.permissions,
1222
1327
  ...userOptions.buildWorkflowOptions?.permissions
@@ -1521,6 +1626,14 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends Component10 {
1521
1626
  * Do this pre-merge of permissions and build steps
1522
1627
  */
1523
1628
  ...options.buildWorkflowOptions,
1629
+ /**
1630
+ * Set BRANCH_NAME so Turborepo remote cache hashes match between local and CI.
1631
+ */
1632
+ env: {
1633
+ BRANCH_NAME: "${{ github.head_ref || github.ref_name }}",
1634
+ ...options.buildWorkflowOptions?.env,
1635
+ ...buildWorkflowOptions?.env
1636
+ },
1524
1637
  /**
1525
1638
  * Some additional permissions may be required when turbo's involved.
1526
1639
  */
@@ -1611,6 +1724,9 @@ export {
1611
1724
  TypeScriptConfig,
1612
1725
  TypeScriptProject,
1613
1726
  VERSION,
1614
- VSCodeConfig
1727
+ VERSION_KEYS_SKIP,
1728
+ VERSION_NPM_PACKAGES,
1729
+ VSCodeConfig,
1730
+ getLatestEligibleVersion
1615
1731
  };
1616
1732
  //# sourceMappingURL=index.mjs.map