diff --git a/gitlab-ci/src/gitlab-ci.ts b/gitlab-ci/src/gitlab-ci.ts index 999d3dde05654edfe655a6e953d14c207aa074ff..29b346d0c7ef4c4e9a4af8c86fd38a41331b5cc7 100644 --- a/gitlab-ci/src/gitlab-ci.ts +++ b/gitlab-ci/src/gitlab-ci.ts @@ -1,6 +1,11 @@ import assert from "assert" import { $, fetch, fs } from "zx" +interface Package { + name: string + version: string +} + export interface VersionObject { major: number minor: number @@ -183,11 +188,27 @@ async function main() { await resetGitRepository() - // Test project with the current dependencies. + // Use the latest version of @openfisca/france-json + await $`npm install @openfisca/france-json@latest` + + // Test project with the current dependencies (and latest version of @openfisca/france-json). await $`ln -s example.env .env` await $`npm run build` // TODO: Add tests. + await $`git add .` + if ((await $`git diff --quiet --staged`.exitCode) !== 0) { + // `npm install @openfisca/france-json@latest` has updated `package-lock.json`. + // => Generate a new version of leximpact-socio-fiscal-api. + const pkg = await fs.readJson(packagePath) + const nextVersionObject = await nextVersionObjectFromPackageAndTags( + pkg, + ) + await commitAndPushWithUpdatedVersions(nextVersionObject) + await triggerDevDeployPipeline() + // await triggerProdDeployPipeline(); + } + await triggerDevDeployPipeline() // await triggerProdDeployPipeline() } else { @@ -212,33 +233,15 @@ async function main() { } else { await resetGitRepository() - // Retrieve current version of project. - const tagVersionObject = (await latestVersionObjectFromTags()) ?? { - major: 0, - minor: 0, - patch: 0, - } - const tagVersion = versionFromObject(tagVersionObject) - let nextVersionObject = { - ...tagVersionObject, - patch: tagVersionObject!.patch + 1, - } + // Use the latest version of @openfisca/france-json + await $`npm install @openfisca/france-json@latest` - // Ensure that the version numbers of project packages are - // compatible with last version tag. const pkg = await fs.readJson(packagePath) - const { version: packageVersion } = pkg - const packageVersionObject = objectFromVersion(packageVersion) - assert( - checkVersionObject(tagVersionObject, packageVersionObject), - `In ${packagePath}, project version should be compatible with ${tagVersion}, got "${packageVersion}" instead.`, - ) - nextVersionObject = maxVersionObject( - nextVersionObject, - packageVersionObject, + const nextVersionObject = await nextVersionObjectFromPackageAndTags( + pkg, ) - // Test project with the current dependencies. + // Test project with the current dependencies (and latest @openfisca/france-json). await $`ln -s example.env .env` await $`npm run build` // TODO: Add tests. @@ -296,6 +299,34 @@ function maxVersionObject( return versionObject1 } +async function nextVersionObjectFromPackageAndTags( + pkg: Package, +): Promise<VersionObject> { + // Retrieve current version of project. + const tagVersionObject = (await latestVersionObjectFromTags()) ?? { + major: 0, + minor: 0, + patch: 0, + } + const tagVersion = versionFromObject(tagVersionObject) + let nextVersionObject = { + ...tagVersionObject, + patch: tagVersionObject!.patch + 1, + } + + // Ensure that the version numbers of project packages are + // compatible with last version tag. + const { version: packageVersion } = pkg + const packageVersionObject = objectFromVersion(packageVersion) + assert( + checkVersionObject(tagVersionObject, packageVersionObject), + `In ${packagePath}, project version should be compatible with ${tagVersion}, got "${packageVersion}" instead.`, + ) + nextVersionObject = maxVersionObject(nextVersionObject, packageVersionObject) + + return nextVersionObject +} + function objectFromVersion( version: string | undefined, ): VersionObject | undefined { diff --git a/package-lock.json b/package-lock.json index eee8e710387e762ab2deb197a366a39ff487ac04..3051a9863b626ff981d441d57d412fb65f5acd88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,8 @@ "@auditors/core": "^0.1.7", "@fontsource/lato": "^4.3.0", "@fontsource/lora": "^4.3.0", - "@openfisca/france-json": "^0.1.1", - "@openfisca/json-model": "^0.15.7", + "@openfisca/france-json": "^0.1.23", + "@openfisca/json-model": "^1.0.0", "@sveltejs/adapter-node": "^1.0.0-next.49", "@sveltejs/kit": "^1.0.0-next.170", "@tailwindcss/forms": "^0.3.2", @@ -1924,15 +1924,23 @@ } }, "node_modules/@openfisca/france-json": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@openfisca/france-json/-/france-json-0.1.1.tgz", - "integrity": "sha512-7RM8TGGcTFYHZkdO7t17KZ1ljKZjc/Fl87oQfD5EXpMhmCYrYncgTxZivuvm0tYMl/iKpL91CKCBzZbytM+1rg==", - "dev": true + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/@openfisca/france-json/-/france-json-0.1.23.tgz", + "integrity": "sha512-gs2fSdiLuUCy32xWRnNXvWhO7Sd7Ix3tBUm6cnM90Gl9w2U5FEo+ED0BFCFp9KqPvU/9VlXhD5IqOdNeRTAyfg==", + "dev": true, + "peerDependencies": { + "@openfisca/json-model": "^1.0.0" + }, + "peerDependenciesMeta": { + "@openfisca/json-model": { + "optional": true + } + } }, "node_modules/@openfisca/json-model": { - "version": "0.15.9", - "resolved": "https://registry.npmjs.org/@openfisca/json-model/-/json-model-0.15.9.tgz", - "integrity": "sha512-Nxu+URTHA/s9qItIzzvg4go6yQFqjIKf9EDG4efH00IX+vkAZj3nD/XMAtMxSKRVOoFolo2VYxUVsi9pmeStDg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@openfisca/json-model/-/json-model-1.0.0.tgz", + "integrity": "sha512-bwBpk/eWBlD5e3YdCadQIEvw/e5j9ojVMKSV/kL63Qb8gz8AR8o/s905EQptN+DVKu0d/nUViNGVT5FaNyeHRw==", "dev": true, "dependencies": { "@auditors/core": "^0.1.11", @@ -8715,15 +8723,16 @@ } }, "@openfisca/france-json": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@openfisca/france-json/-/france-json-0.1.1.tgz", - "integrity": "sha512-7RM8TGGcTFYHZkdO7t17KZ1ljKZjc/Fl87oQfD5EXpMhmCYrYncgTxZivuvm0tYMl/iKpL91CKCBzZbytM+1rg==", - "dev": true + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/@openfisca/france-json/-/france-json-0.1.23.tgz", + "integrity": "sha512-gs2fSdiLuUCy32xWRnNXvWhO7Sd7Ix3tBUm6cnM90Gl9w2U5FEo+ED0BFCFp9KqPvU/9VlXhD5IqOdNeRTAyfg==", + "dev": true, + "requires": {} }, "@openfisca/json-model": { - "version": "0.15.9", - "resolved": "https://registry.npmjs.org/@openfisca/json-model/-/json-model-0.15.9.tgz", - "integrity": "sha512-Nxu+URTHA/s9qItIzzvg4go6yQFqjIKf9EDG4efH00IX+vkAZj3nD/XMAtMxSKRVOoFolo2VYxUVsi9pmeStDg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@openfisca/json-model/-/json-model-1.0.0.tgz", + "integrity": "sha512-bwBpk/eWBlD5e3YdCadQIEvw/e5j9ojVMKSV/kL63Qb8gz8AR8o/s905EQptN+DVKu0d/nUViNGVT5FaNyeHRw==", "dev": true, "requires": { "@auditors/core": "^0.1.11", diff --git a/package.json b/package.json index 97044ebcbfc7ab8b756cea03ac5d9ec4d9183480..a6e95ed1c1c00e1cff329e5ecf5cccbebc72713d 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "@auditors/core": "^0.1.7", "@fontsource/lato": "^4.3.0", "@fontsource/lora": "^4.3.0", - "@openfisca/france-json": "^0.1.1", - "@openfisca/json-model": "^0.15.7", + "@openfisca/france-json": "^0.1.23", + "@openfisca/json-model": "^1.0.0", "@sveltejs/adapter-node": "^1.0.0-next.49", "@sveltejs/kit": "^1.0.0-next.170", "@tailwindcss/forms": "^0.3.2",