@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/README.md +34 -0
- package/lib/index.d.mts +41 -1
- package/lib/index.d.ts +42 -2
- package/lib/index.js +123 -4
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +119 -3
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
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(
|
|
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
|
|
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
|
-
|
|
1727
|
+
VERSION_KEYS_SKIP,
|
|
1728
|
+
VERSION_NPM_PACKAGES,
|
|
1729
|
+
VSCodeConfig,
|
|
1730
|
+
getLatestEligibleVersion
|
|
1615
1731
|
};
|
|
1616
1732
|
//# sourceMappingURL=index.mjs.map
|