Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions .build/publish-caliper.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,11 @@ cp ./README.md ./packages/caliper-cli/README.md
cp ./README.md ./packages/caliper-core/README.md
cp ./README.md ./packages/caliper-fabric/README.md

# distribute root package-lock file as npm-shrinkwrap file to packages before publishing
# We can't do this because caliper-cli declares dependencies on caliper-core and caliper-fabric
# and the packaged shrinkwrap for caliper-cli will not be correct to resolve them as package-lock.json
# is mono-repo aware but the published packages won't understand it in shrinkwrap.json so will create
# invalid references. Doing this would force everyone to have to install all 3 packages manually.
#cp ./package-lock.json ./packages/caliper-cli/npm-shrinkwrap.json
#cp ./package-lock.json ./packages/caliper-core/npm-shrinkwrap.json
#cp ./package-lock.json ./packages/caliper-fabric/npm-shrinkwrap.json
# copy package-lock.json to the individual package dirs as an npm-shrinkwrap.json
# they will be patched with the correct version before publishing to npm
cp ./package-lock.json ./packages/caliper-cli/npm-shrinkwrap.json
cp ./package-lock.json ./packages/caliper-core/npm-shrinkwrap.json
cp ./package-lock.json ./packages/caliper-fabric/npm-shrinkwrap.json

cd ./packages/caliper-publish/
npm ci
Expand Down
4 changes: 2 additions & 2 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
]
}
},
"postCreateCommand": "cd docs && pip install -r pip-requirements.txt && mkdocs build",
"postCreateCommand": "npm install -g npm && cd docs && pip install -r pip-requirements.txt && mkdocs build",
"remoteUser": "vscode",
"forwardPorts": [8000]
"forwardPorts": [8000]
}
49 changes: 49 additions & 0 deletions packages/caliper-publish/lib/impl/npm.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,54 @@ function injectCustomVersion(packageJsonPath, customVersion) {
fs.writeFileSync(packageJsonPath, JSON.stringify(packageObject, null, 4));
}

/**
* Utility function for overwriting the common Caliper version in the package.json files.
* @param {string} shrinkwrapPath The path of the package.json file.
* @param {string} customVersion The new version to use.
*/
function injectCustomShrinkwrapVersion(shrinkwrapPath, customVersion) {

/**
* Update dependency references starting with "@hyperledger/caliper-"
* @param {object} deps the dependency object
* @param {string} newVersion the new version
*/
function updateDependencies(deps, newVersion) {
if (!deps) {
return;
}
for (const depName in deps) {
if (depName.startsWith('@hyperledger/caliper-')) {
deps[depName] = newVersion;
}
}
}
if (!fs.existsSync(shrinkwrapPath)) {
return;
}

const shrinkwrap = JSON.parse(fs.readFileSync(shrinkwrapPath, 'utf8'));
shrinkwrap.version = customVersion;

// Update packages starting with "packages/caliper-"
if (shrinkwrap.packages) {
shrinkwrap.packages[''].version = customVersion;
for (const pkgName in shrinkwrap.packages) {
console.log(pkgName);
if (pkgName.startsWith('packages/caliper-')) {
if (shrinkwrap.packages[pkgName].version) {
shrinkwrap.packages[pkgName].version = customVersion;
updateDependencies(shrinkwrap.packages[pkgName].dependencies, customVersion);
}
}
}
}

// serialize new content
fs.writeFileSync(shrinkwrapPath, JSON.stringify(shrinkwrap, null, 4));
}


/**
* Implements the docker publish command logic.
*/
Expand Down Expand Up @@ -104,6 +152,7 @@ class NPM {
if (tag === 'unstable') {
injectCustomVersion(path.join(packageDir, 'package.json'), packageVersion);
}
injectCustomShrinkwrapVersion(path.join(packageDir, 'npm-shrinkwrap.json'), packageVersion);

try {
let published = false;
Expand Down
Loading