{"_id":"@agile-north/dockship","_rev":"26-b2611d226cbcc482617e92bc8c9f3c23","name":"@agile-north/dockship","dist-tags":{"latest":"1.15.0"},"versions":{"1.1.1":{"name":"@agile-north/dockship","version":"1.1.1","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.1.1","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"42e71c7cf6c88f9e7996b74b26301703b6c1ce80","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.1.1.tgz","fileCount":12,"integrity":"sha512-fguXZSYClf1xHXNX8YaELzdSDcigMcd443EDDlG5/k6gELMhYs/FMwEj5/7ZI0n5byINNqJtF2Qfp9VOJG/WPw==","signatures":[{"sig":"MEUCIQCTSYW7Dfx9r5O8SB1y9ya6YSfwSpcBKUxJG1z5wNxS3gIgKwjP8sJAL+iaSJyt87skAfIrp/kyoPKcaas+XgJokHk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58320},"type":"commonjs","engines":{"node":">=20"},"gitHead":"562dcf25a24abe6e99c6080b33146d65fa4331ed","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","build":"node ./cli.cjs build","version":"node ./cli.cjs version"},"_npmUser":{"name":"gregbowyer84","email":"greg@nrth.com"},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.1.1_1774044022274_0.03432815015584434","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@agile-north/dockship","version":"1.2.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.2.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"48421e49b80d51d069b3fe791e304ad146bfce54","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.2.0.tgz","fileCount":12,"integrity":"sha512-fr4LFtV1hZkFKULKgjPF+OY1XUehJMrXg1Wg+0oMbdG+FP7OTkBW0/31iJSSA/ElnEMBjwGKEjqg/oqfnibtuQ==","signatures":[{"sig":"MEUCIC4UfmWJKh1lZROjGzsr0slDrA6oKWjxu8+KFNTOkiUeAiEA3r+CXe3phT/fpPlDU+Zmh/3hW9Y66Cq9SPDf/10Nj7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":75338},"type":"commonjs","engines":{"node":">=20"},"gitHead":"bb0fce281a727a0a73fa136b1280562635d3b9df","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","version":"node ./cli.cjs version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.2.0_1774178194117_0.8160967721827772","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@agile-north/dockship","version":"1.3.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.3.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"162920a25fcbf84d7a9cc8060f78c60d506342b3","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.3.0.tgz","fileCount":12,"integrity":"sha512-CIAB0CJhrNBNBuBdT6A7Hr3FK5vn41XTKLd92O07L4tedgKyfImxxuZDzgtUitSqOoNYvG2JMUD164zLWtv4IQ==","signatures":[{"sig":"MEQCIG70ot1NKo3gYmvl8bTqjz+msNkKJotK6mxCiv4ciMTzAiBC77ihs9u0JFWwrBwWZA9YVBpmf8a67p+PWLNYs/t5rg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77437},"type":"commonjs","engines":{"node":">=20"},"gitHead":"301e22f70d3a9f68b0f6738b6290e3a2e2507ab9","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","version":"node ./cli.cjs version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.3.0_1774178695032_0.9153160145153634","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@agile-north/dockship","version":"1.4.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.4.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"b8f70c15d80fd55e53fbcdfa4b735d5a75434ccc","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.4.0.tgz","fileCount":13,"integrity":"sha512-JJjqowepcMZ0GVi4kMRg4oLFhCwjBeasu7mieozqCVxKG46NTe0AvtRX//aSiHgo/iucBLbkJbhXM8DK2dOzxw==","signatures":[{"sig":"MEUCIQCkOXG9nWuqJsR4PMKAyW9JiO9up0ENDjhsqOTEqvwmFAIgD1XyxUkAzkd9fIi6nj92F4SbezLzRc0b6tWW4UZczpw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":95031},"type":"commonjs","engines":{"node":">=20"},"gitHead":"458ef38f244912bb747a1460080e0a61dcf5bddf","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","version":"node ./cli.cjs version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.4.0_1774183839915_0.4207472962488661","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@agile-north/dockship","version":"1.4.1","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.4.1","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"a6319726c281e4b3d1bd20eaa15f7434140f2f6a","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.4.1.tgz","fileCount":13,"integrity":"sha512-/ZAsWtveG8e5LyptV8g8Dcgcv6JHukIJo8zJI1BJKC8wu84ZM+woArEMVhlEKoX8ilxrc0qh1jaE0quSW/9GEw==","signatures":[{"sig":"MEUCIFNjYCitDLCkvK5dbTA6pI+G2o7Ivb799Yt3iXle3r72AiEAnoLzKKoDLAZtrH14LOfgEcPcvMMM8S5eaE/+nTHTf8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":96025},"type":"commonjs","engines":{"node":">=20"},"gitHead":"16069add6bd8a59d0573a803e87a7405efa7521a","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.4.1_1774184435585_0.5390788934166992","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@agile-north/dockship","version":"1.5.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.5.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"abaa1e78ae30dbd4d69287aefd03a38dc6f3de00","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.5.0.tgz","fileCount":13,"integrity":"sha512-Dp2mSfHcdmHKMrGfkuad/k+y+ULCZhFJr08AN58i1hSA2W2iWVIL3d6rNmF4/D8EpqVU58oAdiMlBK7fvtW/yw==","signatures":[{"sig":"MEQCIGULsaa4e6iSXrNWtvHua0Oqi4ICG6MiY4Y3CLeprsInAiAegF66eSv26HRS8HJtFY5CGVQ7+F+fKVzWsckP/xxzZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":99885},"type":"commonjs","engines":{"node":">=20"},"gitHead":"426faa9ab704a6831a9fefe849f990d0c05114ae","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.5.0_1774186404010_0.6124270219561065","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@agile-north/dockship","version":"1.6.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.6.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"994deb91c82ff53851d9d1f6b91344e43ad6689a","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.6.0.tgz","fileCount":13,"integrity":"sha512-Pztgj1AOKA3KigmxrmCP/n1WW/Kuqvc3dzyxMxGsH19KyI5ZYwixrXnz4VLJi555r859sVZukYP5hSXaELfypQ==","signatures":[{"sig":"MEYCIQClHQY8u5CGouljcboQ6kNxteTTDJV5XAnPtd8pEIPj6wIhAJnrYLxyw/PsMPhZPK9j8FunOHNitxoYQcz6JiUZP2SN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":119296},"type":"commonjs","engines":{"node":">=20"},"gitHead":"2015c7de410c0449c53ff850f42e0c7fdcc56aa2","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.6.0_1774206357082_0.518843157170574","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@agile-north/dockship","version":"1.7.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.7.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"832a8140fb3b99001ef83c346de0f89996fb9ae1","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.7.0.tgz","fileCount":13,"integrity":"sha512-4EobxMzVn0MIlO9KSNdyKeJvDK7G14bxTRuKNsIhPtAeP7hDFAWQcO3ROlVB5N9vXIh7cZ8qE522hsm9Q8RVxg==","signatures":[{"sig":"MEUCICGavePqNY3JhiEUD06jVt23reHxlOBZHoiy+xIfubL2AiEA6kcrcrWJqi1iom6Iiq2LoVd7yxT2GKbSOPquPrBtyB0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121946},"type":"commonjs","engines":{"node":">=20"},"gitHead":"b7f359f297d5a2c92e9d0e9c699aab6c64eb643b","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.7.0_1774297483580_0.705341998349307","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@agile-north/dockship","version":"1.8.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.8.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"e9626f46189c80266724e5a9a7509261e1f7a30f","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.8.0.tgz","fileCount":13,"integrity":"sha512-HZHd1myE6GkWGRcljesy8B8X11iPA7IKTi4fmXaBJ7cpGoWnDD3wEKqfyXTigKSBBXYQcUgEV9tg26iMpJTqHA==","signatures":[{"sig":"MEQCIDmsDQ5sFqx4GW8CSxbGhUJ0MJPID6w6OUrhz7djvrJSAiAk9n7lqDVjmEVuABR8jqdACiNpXLnL2tQNzS1CqnzByw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":131708},"type":"commonjs","engines":{"node":">=20"},"gitHead":"c713cafed100024d15862c739fc354ff2a0fb4aa","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.8.0_1774302763362_0.10464427269270793","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@agile-north/dockship","version":"1.9.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.9.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"13d5b36aa4325a456ef0141d029eeccc30a5492c","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.9.0.tgz","fileCount":13,"integrity":"sha512-367zTGmXemVfSf/Y7OcZ3hRgjSQ0kkLCETy39Y9pbtLMGJ/OLjUGrgau9gE9+GgEu/J760RvwpQ8pDeVBAkG2A==","signatures":[{"sig":"MEQCIC+Zn5aotl/rQB+YGB1oMQX40+izCQlpQuLWRTjK151+AiA5I4G9BKGTFlEaaEmnHoLwr9/0PSmuf9eFhkAsG3JjwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135840},"type":"commonjs","engines":{"node":">=20"},"gitHead":"3b8708fd90e0db84a4544ae60d4462fa7cbf12ee","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.9.0_1774306665766_0.21350664876322756","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@agile-north/dockship","version":"1.9.1","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.9.1","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"58996133632dac1e5d56f0d757fdd6ac502592f2","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.9.1.tgz","fileCount":13,"integrity":"sha512-DQjR1LTDCko6OcqNwk8IPm8Zla15rxXOmK/WrY+OHZeOaU3DiBcmrzhQbhlYl8J3rDDAvq7/gTKHGBiAOCKK2A==","signatures":[{"sig":"MEUCIQCppbzFtkE4AG5bFOnJ7EAAOStseerbs9B2XB47drVxqQIgRC1SyKqHkbIzjN+I29PiRhlGmmQJYfAjn8wJGLO9FNw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":136314},"type":"commonjs","engines":{"node":">=20"},"gitHead":"b72e2349fcdd0f868c9a0deb0584976181f2b434","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.9.1_1774308743426_0.8819194762735836","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"@agile-north/dockship","version":"1.9.2","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.9.2","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"c06672b6128bc9e4fa0fc1a394315aa1b912f083","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.9.2.tgz","fileCount":13,"integrity":"sha512-SbiW1GO+qJbyCjnEIPQIsFH1LKPbEa35vldQmFQ16yweqUEDN0ZR+TNRw+pS+VDmLdcWrDsbYcqYo1+sXNO6OQ==","signatures":[{"sig":"MEUCIQDAGl8AU1VNQugGdDH8ZXeYSDgZGmci99eg+GcamiJA/AIgBC0XUTrEwcTAdBJS/eiRGVbm4+RpImF4JxXBf1UruCw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":136457},"type":"commonjs","engines":{"node":">=20"},"gitHead":"81495ea1beb68f772404cb38dcca8687f40b6993","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.9.2_1774309763762_0.5261665437130456","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@agile-north/dockship","version":"1.10.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.10.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"69fed9fb18b5e004f824ae822055c67ad58a0783","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.10.0.tgz","fileCount":13,"integrity":"sha512-3sMw2QGqBt58eMWH5/6yej6Xt/j6ErEJlObJWyB+8nL2pJ2U03x/2HT25/f/W4TIghG8aKxWb5gp10BzVJ2IGw==","signatures":[{"sig":"MEYCIQDKsAoU91cxONeDYW8JWYgJLDR1HXZLExTffBxHx5tL1QIhAP8/IPQT9r9PRDa0NWKF2U1OPtgSzAXn1i07bKeVYg2u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":138357},"type":"commonjs","engines":{"node":">=20"},"gitHead":"6a737e30da305e9d26039fe7be599a705d039a78","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.10.0_1774364874141_0.5704817806127473","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@agile-north/dockship","version":"1.10.1","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.10.1","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"fc7061844e4aefc4afc360281f057974a3cbcef7","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.10.1.tgz","fileCount":13,"integrity":"sha512-IsQTnymxJGjdyqwwE5yLgnwgcHePpvCkkYTdvURKEf+7pdiqAIDwwAHl0aoCDUNCV4ew9HP8suOuPdFd4dqnKA==","signatures":[{"sig":"MEUCIQDfa97bO+++KjP7hYk18HAjw9Q6h/1QDcwGAp7j+JPn4QIgWU4nmAVNNFps39CCEpfSYOb6qyqYWt+Fd1dxJGUSCDs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":139004},"type":"commonjs","engines":{"node":">=20"},"gitHead":"a09e0b96f00591bd1fe8ff1ebe65d720abda400b","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.10.1_1774367955008_0.602478072887187","host":"s3://npm-registry-packages-npm-production"}},"1.10.3":{"name":"@agile-north/dockship","version":"1.10.3","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.10.3","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"d53c9504d9383f7df2cf41013d395a979b3ed923","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.10.3.tgz","fileCount":13,"integrity":"sha512-aidxSiML4WuIVCdoBshDz5gH+grYqKm1/iIHje9Mm2ve87HsLudhGt6rHbxvPNqUqtIlM9CxD2DgR6MPlSeVGg==","signatures":[{"sig":"MEQCIF/+QmEvssaMhm2Bz1zCWDiIeWUC/aBtiBvUIBGjG7RkAiAf3s8qRBILBm60dUAY4t/JSf+qv8uQpj29uKofNlpnzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.10.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":139322},"type":"commonjs","engines":{"node":">=20"},"gitHead":"536eca02644d8e74f316937a0b0dd3e7692ff8de","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.9.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.10.3_1774370147150_0.1416292205530596","host":"s3://npm-registry-packages-npm-production"}},"1.10.4":{"name":"@agile-north/dockship","version":"1.10.4","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.10.4","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"6e76789ecdbde73a9cb38231117b2e1c72d3ecff","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.10.4.tgz","fileCount":13,"integrity":"sha512-UG6GFGwb34YUSXznPjfsNnRX/MuksStx0R+/906ILHTvvxP5XDfUU9HnD0QYo7yatkSB2w9o46oXGTajQrYL7w==","signatures":[{"sig":"MEUCIQCK7JhbUri5WvWoaBBUvwP7HWL9wXUV6D12DGmKQ7FqsAIgfxRACiqtpWXTVJ1svARDIKVyyJTeGpNV4NFIiFS2XTU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.10.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":139537},"type":"commonjs","engines":{"node":">=20"},"gitHead":"80bcfb47cdaaa2237e67c5ccd9c39ad63205d8b9","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.12.1","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.10.4_1776928868011_0.4820951386345824","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@agile-north/dockship","version":"1.11.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.11.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"08ffad47ccf0e96e1634f8418a736396bd4aae0b","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.11.0.tgz","fileCount":13,"integrity":"sha512-HFFqSoeYp+xc15GWTL24llDUn+0VXprAh0/7ofwaXFZ/pJ+ee1u5R+XbzdC2fnyERaKhePjPBK2vJY1BOpOjnw==","signatures":[{"sig":"MEUCIQDj8hE9XDnkQDGni9hVai1/9DjoX+7p74kdnAw6tbwfCQIgJW2bKPSr8fNRLdVGKKmOC5PrdN/GMxgfb1etYV0vaQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":175335},"type":"commonjs","engines":{"node":">=20"},"gitHead":"55a2920894919d48e845cacb863251e2ee43482d","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.11.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.11.0_1776939536972_0.489144402974784","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"@agile-north/dockship","version":"1.11.1","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.11.1","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"906656a2e0045371d08178b5cd57befc40a753e2","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.11.1.tgz","fileCount":13,"integrity":"sha512-YshTLm3cnYxKQQTasXP/gjeOiRLTl1FDN2rfa3kPwSDam9vZk4KhjBxcXr6Wl9CfjTPBQ6Q74F/HytATRclotQ==","signatures":[{"sig":"MEYCIQCpepQhzsECtrhb2vvGSjROShKiRMZ4Sha2fwYxSKvs9QIhANBS/i+xImJORTDaPPcf595OprKWgs0WYfHMAg+lr/X1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":175832},"type":"commonjs","engines":{"node":">=20"},"gitHead":"83e49492a2e251799cba26284411867ec456163f","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.12.1","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.11.1_1776958630213_0.4570819079887245","host":"s3://npm-registry-packages-npm-production"}},"1.11.2":{"name":"@agile-north/dockship","version":"1.11.2","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.11.2","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"e52a184cf3c747d1bd15a5bca6676de45a3df1b3","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.11.2.tgz","fileCount":13,"integrity":"sha512-D7dIO44mO/CAJJKzN9wG6ERiBPWTUFhoAvTaILNocfDSaxVbDSmv1GlBp3xlnrsnToMq/hmCLdDCNLoStWu3dQ==","signatures":[{"sig":"MEUCIBARJsXU4XGLHDoSZcob13Mv7jGGU2F85SU1aWPkhA56AiEAoOsXxKK3ced+McuIAcaDgS5gxzDB6g2vI25UHWPmOzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.11.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":181104},"type":"commonjs","engines":{"node":">=20"},"gitHead":"a04484b4f22652af1d46c8584c212986f0ecfbde","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.11.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.11.2_1776971199968_0.5633080974143432","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@agile-north/dockship","version":"1.12.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.12.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"887a9fbc750284e3c7c86e1f36096907f78260b5","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.12.0.tgz","fileCount":13,"integrity":"sha512-/0+7U1jxFpHCRyjUltt6w7oUJQepOWeZTaJvAsl0smDj/wN9XGyBFo3W12ZOItuCHNM624048UKhsQhEX1W/Gg==","signatures":[{"sig":"MEQCICM5bnvh9Y/HIgOksC/mDEkpcill2S4gPDtJtqnmflJlAiByJKwLYLvLc8Y3c6Z0UQZI0AUopryCDGURErhUFL+laQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":188661},"type":"commonjs","engines":{"node":">=20"},"gitHead":"d8322e9df6a549269b51385d060ce07edbd125e4","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.11.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.12.0_1776973037331_0.9623272146291844","host":"s3://npm-registry-packages-npm-production"}},"1.12.1":{"name":"@agile-north/dockship","version":"1.12.1","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.12.1","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"bed8f3ea9446c97a51fafc64f52e4f702770c79f","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.12.1.tgz","fileCount":13,"integrity":"sha512-xk6MlmQiTtE2yw5cx33z6r8DLXsp6tBAiAV2U90B7Pd3eZAXQ/pl/ZtZIrAlJbHPbg8tg9AZL0x66Ji16jajog==","signatures":[{"sig":"MEYCIQCMLCdx5tmvZw/UmixtrK31mT+rGeq5WgKTu0IDmE085gIhAOxDig8pMMpUEUAHHmbv4qtGY/4Lu2bTIi0oWU69WEqd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":192555},"type":"commonjs","engines":{"node":">=20"},"gitHead":"00a997ca3044c124b872ef173202e5639e16b5bc","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.11.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.12.1_1776977486842_0.678860611083826","host":"s3://npm-registry-packages-npm-production"}},"1.12.2":{"name":"@agile-north/dockship","version":"1.12.2","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.12.2","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"87b5966444636b4d2f217700ae62e46024c2c1f4","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.12.2.tgz","fileCount":13,"integrity":"sha512-1a5wvgiSRz+6WCKQeZaHIV+rda4YEhUXGELBRhoLSitKfAde5JwHnu5Kbyqjji/YSetNEZ+szzEUi62L3D4kaA==","signatures":[{"sig":"MEUCIQCtHaObPU+ma60ZewLIstwFEWHHoerdl18E41ibkOG45AIgBtO3/Hve6ghLIIKxC4jzjGHEirqm7p8YyHUhmmFWwPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.12.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":196307},"type":"commonjs","engines":{"node":">=20"},"gitHead":"ccde73cd503735ce9530872293cfd855bcd8635d","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.11.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.12.2_1776980397208_0.5333372447561691","host":"s3://npm-registry-packages-npm-production"}},"1.12.3":{"name":"@agile-north/dockship","version":"1.12.3","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.12.3","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"17778df81288a61de63d7928e3a4e99476d79f77","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.12.3.tgz","fileCount":13,"integrity":"sha512-GVyrFILK/w0IkH1tYvRqAN9aQiOhMwnXpXF5s+X7H2cX40TigUXc8VS6N+/FscebZq122hpAjOTRbyeI27O+Yg==","signatures":[{"sig":"MEUCIHnExI61MP8mvLBtf2IU+g7+/6RsfC39wVE4nrR94TspAiEAqEhHkTF54oOPn1laL9RlRHcoT9QPmvalAHphhVgsxbE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.12.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":196555},"type":"commonjs","engines":{"node":">=20"},"gitHead":"780783bfb4d29c75467f077f02e53ce6c71af338","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.11.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.12.3_1776981967229_0.17797364078346378","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@agile-north/dockship","version":"1.13.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.13.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"89956f7ae50a227edc1925bd7a9ef4f62c15f053","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.13.0.tgz","fileCount":13,"integrity":"sha512-9FJGpQMrq0FxeKNVFy870duvjExtrTVfY79KqiGAEcgOaim6OVu12YgwZ/S8orieKuT268DFY/7E1dczepon0A==","signatures":[{"sig":"MEYCIQCTf8wDMaMQfSXrKISDwelxXRbwh7wVKjvme6TlxcbDmgIhAP0KUQpqCAGj59SSPJdPYTIKUKN9ATiwtJC8Oy7WXdqg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":203745},"type":"commonjs","engines":{"node":">=20"},"gitHead":"86a3ab528d766578e2c853d2de9d5647029201a7","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.11.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.13.0_1777017188817_0.995788484613306","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@agile-north/dockship","version":"1.14.0","keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"license":"MIT","_id":"@agile-north/dockship@1.14.0","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"homepage":"https://www.nrth.com","bugs":{"url":"https://github.com/agile-north/dockship/issues"},"bin":{"dock":"cli.cjs"},"dist":{"shasum":"e8cb74959fb7ad4883fd9699aac903dd8687cc99","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.14.0.tgz","fileCount":14,"integrity":"sha512-ZGsDFxzwyI7xO1ryTWYmaQ5S8dbhagaxhHCNGtQ3ks6caiXUJ7mjjsU6bHfj3WDmeuE/bCFYpGhsENNtICRIkw==","signatures":[{"sig":"MEUCIQCLZTzKce+w2cdhmxkNNCh8u7S2tE9LQwcc3KHjsLodwwIgLLVmz9nrgIN7h6kLYEmxWlKwnMYq1hMHYfVc1LaurGs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":210975},"type":"commonjs","engines":{"node":">=20"},"gitHead":"70d0f80a32705263b2051294b982e33b991bfd1c","private":false,"scripts":{"all":"node ./cli.cjs all","ship":"node ./cli.cjs push","tags":"node ./cli.cjs tags","test":"node --test","build":"node ./cli.cjs build","lint:md":"npx markdownlint-cli2 \"**/*.md\"","prepare":"npm run hooks:install","version":"node ./cli.cjs version","validate":"npm run lint:md && npm test","hooks:install":"node ./scripts/install-hooks.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"repository":{"url":"git+https://github.com/agile-north/dockship.git","type":"git"},"_npmVersion":"11.11.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dockship_1.14.0_1777573774899_0.3432411274410474","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@agile-north/dockship","version":"1.15.0","description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","private":false,"type":"commonjs","bin":{"dock":"cli.cjs"},"publishConfig":{"access":"public"},"scripts":{"build":"node ./cli.cjs build","ship":"node ./cli.cjs push","all":"node ./cli.cjs all","version":"node ./cli.cjs version","tags":"node ./cli.cjs tags","test":"node --test","lint:md":"npx markdownlint-cli2 \"**/*.md\"","hooks:install":"node ./scripts/install-hooks.cjs","prepare":"npm run hooks:install","validate":"npm run lint:md && npm test"},"keywords":["docker","ci","cd","version","semver","build","publish"],"author":{"name":"NRTH"},"homepage":"https://www.nrth.com","repository":{"type":"git","url":"git+https://github.com/agile-north/dockship.git"},"bugs":{"url":"https://github.com/agile-north/dockship/issues"},"engines":{"node":">=20"},"license":"MIT","gitHead":"5ef87cf5a6db4104053accf71324d0d87a438120","_id":"@agile-north/dockship@1.15.0","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-ii5GBbqoxl7m6TWs/D9vl5AhmB8YowPtKAd1so5OEubRoxpBopfrWceRauCDQp5DFxQljITkfC7/MnUPt9lbDw==","shasum":"d5c9d0d27b46653b9b07b5171ee532c93bbd6ebc","tarball":"https://registry.npmjs.org/@agile-north/dockship/-/dockship-1.15.0.tgz","fileCount":14,"unpackedSize":211529,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agile-north%2fdockship@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDYTTTmTjndyNEh0VFqMOc1iCpX6kiMAKQN/Fx76uSKDAiAHj4Gs1XeMCIsUkT22xRtn3+KYHqU8wBtDJ8kEjuLfbw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2edc1069-bb04-4036-8039-3889ab5634a9"}},"directories":{},"maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dockship_1.15.0_1777978295727_0.7677094727922018"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-20T22:00:22.170Z","modified":"2026-05-05T10:51:36.230Z","1.1.1":"2026-03-20T22:00:22.476Z","1.2.0":"2026-03-22T11:16:34.275Z","1.3.0":"2026-03-22T11:24:55.172Z","1.4.0":"2026-03-22T12:50:40.049Z","1.4.1":"2026-03-22T13:00:35.735Z","1.5.0":"2026-03-22T13:33:24.151Z","1.6.0":"2026-03-22T19:05:57.238Z","1.7.0":"2026-03-23T20:24:43.716Z","1.8.0":"2026-03-23T21:52:43.502Z","1.9.0":"2026-03-23T22:57:45.931Z","1.9.1":"2026-03-23T23:32:23.625Z","1.9.2":"2026-03-23T23:49:23.904Z","1.10.0":"2026-03-24T15:07:54.276Z","1.10.1":"2026-03-24T15:59:15.190Z","1.10.3":"2026-03-24T16:35:47.295Z","1.10.4":"2026-04-23T07:21:08.237Z","1.11.0":"2026-04-23T10:18:57.189Z","1.11.1":"2026-04-23T15:37:10.347Z","1.11.2":"2026-04-23T19:06:40.116Z","1.12.0":"2026-04-23T19:37:17.490Z","1.12.1":"2026-04-23T20:51:26.996Z","1.12.2":"2026-04-23T21:39:57.367Z","1.12.3":"2026-04-23T22:06:07.383Z","1.13.0":"2026-04-24T07:53:08.938Z","1.14.0":"2026-04-30T18:29:35.050Z","1.15.0":"2026-05-05T10:51:35.908Z"},"bugs":{"url":"https://github.com/agile-north/dockship/issues"},"author":{"name":"NRTH"},"license":"MIT","homepage":"https://www.nrth.com","keywords":["docker","ci","cd","version","semver","build","publish"],"repository":{"type":"git","url":"git+https://github.com/agile-north/dockship.git"},"description":"Docker container versioning, building, and publishing CLI for opinionated CI/CD","maintainers":[{"name":"gregbowyer84","email":"greg@nrth.com"}],"readme":"# dockship\n\nOpinionated Docker image versioning, building, and publishing for CI/CD pipelines.\n\n[![npm version](https://img.shields.io/npm/v/%40agile-north%2Fdockship?logo=npm)](https://www.npmjs.com/package/@agile-north/dockship)\n[![npm downloads](https://img.shields.io/npm/dm/%40agile-north%2Fdockship?logo=npm)](https://www.npmjs.com/package/@agile-north/dockship)\n[![license](https://img.shields.io/npm/l/%40agile-north%2Fdockship)](https://github.com/agile-north/dockship/blob/main/LICENSE)\n[![node](https://img.shields.io/node/v/%40agile-north%2Fdockship?logo=node.js)](https://www.npmjs.com/package/@agile-north/dockship)\n[![CI](https://github.com/agile-north/dockship/actions/workflows/ci.yml/badge.svg)](https://github.com/agile-north/dockship/actions/workflows/ci.yml)\n[![Release](https://github.com/agile-north/dockship/actions/workflows/release.yml/badge.svg)](https://github.com/agile-north/dockship/actions/workflows/release.yml)\n\nSource repository: [github.com/agile-north/dockship](https://github.com/agile-north/dockship)\n\n**dock** • **ship** • **repeat**\n\n## What is dockship?\n\n`@agile-north/dockship` is a lightweight CLI tool that standardizes Docker container builds across projects. It handles:\n\n- **Semantic versioning** from multiple sources (Node.js, .NET, GitVersion, NBGV, custom providers)\n- **Multi-tag Docker builds** (version, major, major.minor, optional latest)\n- **Prerelease-aware tags**: `major` and `major.minor` tags preserve prerelease suffixes when present (`1.2.3-beta.1` → `1-beta.1`, `1.2-beta.1`)\n- **Registry push** with consistent tagging strategy\n- **Polyglot support** – Node.js, C#/.NET, GitVersion, NBGV, and extensible to any language\n- **Git-height versioning** – automatic build number from commit count\n\nPerfect for microservices, full-stack apps, and standardized CI/CD across teams.\n\n## Installation\n\nYou can use dockship in two ways:\n\n1. Install as a dev dependency (recommended for repeatable team workflows)\n2. Run directly with `npx` (no local install required)\n\n### Option 1: Install in your project\n\n```bash\nnpm install -D @agile-north/dockship\n```\n\nThen add to `package.json` scripts:\n\n```json\n{\n  \"scripts\": {\n    \"dock:build\": \"dock build\",\n    \"dock:ship\": \"dock ship\",\n    \"dock:all\": \"dock build && dock ship\"\n  }\n}\n```\n\n### Option 2: Run directly with npx (no install)\n\n```bash\n# Run without adding dockship to package.json\nnpx @agile-north/dockship version\nnpx @agile-north/dockship build\nnpx @agile-north/dockship ship\nnpx @agile-north/dockship all\nnpx @agile-north/dockship tags\n```\n\nFor reproducible CI/local behavior, you can pin a version:\n\n```bash\nnpx @agile-north/dockship@1.4.0 version\n```\n\n## Automated npm publish (GitHub Actions)\n\nThis repo includes a release workflow at `.github/workflows/release.yml`.\n\n- Triggers on pushes to `main` and `develop`\n- Can also be run manually with **workflow_dispatch**\n- Skips publishing when that exact package version already exists on npm\n\n## Version management\n\nVersioning is automated by [release-please](https://github.com/googleapis/release-please)\nvia `.github/workflows/release.yml`.\n\nHow it works:\n\n1. Merge PRs into `main` using [Conventional Commits](https://www.conventionalcommits.org/) (see [CONTRIBUTING.md](CONTRIBUTING.md))\n2. release-please detects `feat:`, `fix:`, `perf:` commits and opens a **Release PR** that bumps `package.json` version and updates `CHANGELOG.md`\n3. Review and merge the Release PR\n4. release-please sets `release_created=true`, which runs the inline publish job and pushes to npm `latest`\n\nVersion bump rules (SemVer):\n\n- `feat:` commits → minor bump (`0.1.0` → `0.2.0`)\n- `fix:` / `perf:` commits → patch bump (`0.1.0` → `0.1.1`)\n- `feat!:` / `BREAKING CHANGE:` footer → major bump (`0.1.0` → `1.0.0`)\n\nBranch/channel behavior:\n\n- Release PR merged to `main` with `release_created=true` → stable publish to npm `latest`\n- `develop` push → prerelease publish to npm `next` (`X.Y.Z-dev.<run>.<sha>`)\n- manual `workflow_dispatch` → only `main` (stable) or `develop` (prerelease); other refs are rejected\n\nAllowed publish routes (enforced):\n\n- Release PR merged on `main` (`release_created=true`) → stable publish\n- Push to `develop` → prerelease publish\n- Manual run on `main` or `develop` only → stable/prerelease respectively\n- Direct push to `main` → not a publish route\n\nCI validation:\n\n- `.github/workflows/ci.yml` runs on PRs and pushes to `main`, `develop`, and `feature/**`\n- It runs `npm test` and validates installability and npm package metadata using dry-run checks\n- Configure branch protection on `main` and require status checks **CI / validate** and **PR Title / conventional-pr-title** before merge\n\nLocal validation:\n\n```bash\nnpm run lint:md\nnpm test\n```\n\nOptional (recommended) one-time setup to enforce markdown lint before commits:\n\n```bash\nnpm run hooks:install\n```\n\nHooks are installed automatically on `npm install` via the `prepare` script.\n\nAuthentication options:\n\n- Trusted publishing: configure this GitHub repo as a trusted publisher in npm settings; no `NPM_TOKEN` secret is required for package publish.\n\n## Quick Start\n\n**1. Optional: create `.dockship/dockship.json`**\n\n```json\n{\n  \"strictConfig\": false,                  // Optional: fail fast on invalid config/legacy keys\n  \"docker\": {\n    \"file\": \"Dockerfile\",\n    \"context\": \".\",\n    \"target\": {\n      \"registry\": \"registry.example.com\",\n      \"repository\": \"my-org/my-app\"\n    },\n    \"login\": {\n      \"registry\": \"registry.example.com\"\n    },\n    \"push\": {\n      \"enabled\": false,\n      \"branches\": [\"main\", \"develop\"],\n      \"denyNonPublicPush\": false\n    },\n    \"tags\": {\n      \"latest\": false\n    },\n    \"tagPolicy\": {\n      \"public\": [\"full\", \"majorMinor\", \"major\"],\n      \"nonPublic\": [\"full\", \"majorMinor\", \"major\"]\n    },\n    \"nonPublicMode\": \"\",\n    \"aliases\": {\n      \"branch\": false,\n      \"sanitizedBranch\": false\n    }\n  },\n  \"git\": {\n    \"publicBranches\": [\"main\", \"release/*\"],\n    \"nonPublicBranches\": [\"feature/*\", \"hotfix/*\"]\n  },\n\n  \"version\": {\n    \"provider\": \"auto\",\n    \"nodejs\": {\n      \"packageJsonPath\": \"package.json\",\n      \"mode\": \"git-height\"\n    }\n  }\n}\n```\n\n**2. Create `Dockerfile`**\n\n```dockerfile\nFROM node:18-alpine\nWORKDIR /app\nCOPY . .\nRUN npm ci && npm run build\nEXPOSE 3000\nCMD [\"node\", \"dist/index.js\"]\n```\n\n### 3. Run commands\n\n```bash\n# Show resolved version\nnpx dock version\n\n# Build image with computed version\nnpx dock build\n\n# Ship image to registry\nnpx dock ship\n\n# Build and ship\nnpx dock all\n\n# Show generated tags\nnpx dock tags\n\n# Apply computed policy tags to local image references\nnpx dock tag\n\n# Preview deterministic tags and push policy outcome\nnpx dock plan\n\n# Emit machine-readable envelope output\nnpx dock version --json\nnpx dock tags --output json\nnpx dock all --json\n```\n\n## JSON Output\n\nDockship supports structured output for automation and CI pipelines.\n\n- `--json` is shorthand for `--output json`\n- `--output` supports `human` (default) and `json`\n\nOutput-to-file flags (all equivalent):\n\n- `--json-file <path>`\n- `--output-file <path>`\n- `--output-json-file <path>`\n\nWhen any output-file flag is used, dockship writes the JSON envelope to that file and keeps stdout clean.\n\nIn `json` mode:\n\n- stdout contains exactly one JSON object\n- stderr may contain diagnostic command output\n- exit codes follow command status semantics\n\nJSON contract reference:\n\n- `docs/output.md`\n\nExamples:\n\n```bash\n# Full envelope for version resolution\nnpx dock version --json\n\n# Computed tags and fully-qualified references\nnpx dock tags --output json\n\n# Build + push with step-level results\nnpx dock all --json\n\n# Write envelope to file (aliases supported)\nnpx dock tags --json-file dock-tags.json\nnpx dock tags --output-file dock-tags.json\nnpx dock tags --output-json-file dock-tags.json\n```\n\nExtract values:\n\n```bash\n# deployable image reference\njq -r '.result.artifact.image.reference'\n\n# immutable artifact identifier\njq -r '.result.artifact.id'\n```\n\n## Documentation\n\nKeep README focused on onboarding and common usage. Detailed feature contracts live under `docs/`.\n\n- `docs/output.md` - JSON output contract and status semantics\n\n## Configuration: dockship.json\n\n### Docker Settings\n\nThe config file is optional. If `.dockship/dockship.json` is missing, dockship uses built-in defaults:\n\n- `strictConfig = false`\n- `docker.file = \"Dockerfile\"`\n- `docker.context = \".\"`\n- `docker.push.enabled = false`\n- `docker.push.branches = []`\n- `docker.push.branchesShortcut = \"\"`\n- `docker.push.denyNonPublicPush = false`\n- `docker.tags.latest = false`\n- `docker.tagPolicy.public = [\"full\", \"majorMinor\", \"major\"]`\n- `docker.tagPolicy.nonPublic = [\"full\", \"majorMinor\", \"major\"]`\n- `docker.nonPublicMode = \"\"`\n- `docker.aliases.branch = false`\n- `docker.aliases.sanitizedBranch = false`\n- `docker.aliases.nonPublicPrefix = \"\"`\n- `docker.aliases.rules = []`\n- `docker.cleanup.local = \"auto\"`\n- `docker.runner = \"build\"`\n- `git.publicBranches = []`\n- `git.publicBranchesShortcut = \"\"`\n- `git.nonPublicBranches = []`\n- `git.nonPublicBranchesShortcut = \"\"`\n\nFor `dock build`, `dock ship`, and `dock all`, image target settings still need to come from config or env:\n\n- `DOCKER_TARGET_REGISTRY`\n- `DOCKER_TARGET_REPOSITORY`\n\nConfiguration precedence is:\n\n1. CI/runtime environment variables\n2. `.env` values at the repo root\n3. `.dockship/dockship.json`\n4. built-in defaults\n\n```json\n{\n  \"strictConfig\": false,\n  \"docker\": {\n    \"file\": \"Dockerfile\",                  // Path to Dockerfile\n    \"context\": \".\",                        // Build context\n    \"target\": {\n      \"registry\": \"registry.io\",           // Docker registry\n      \"repository\": \"org/app\"              // Image repository\n    },\n    \"login\": {\n      \"registry\": \"registry.io\"            // Optional: login registry override\n    },\n    \"push\": {\n      \"enabled\": false,                     // Enable/disable push\n      \"branches\": [\"main\", \"develop\"],    // Optional: allowed branches, supports *\n      \"branchesShortcut\": \"main,develop\",  // Optional: comma/semicolon/newline-delimited shortcut\n      \"denyNonPublicPush\": false             // Optional: deny pushes for non-public classified builds\n    },\n    \"tags\": {\n      \"latest\": false                       // Add 'latest' tag\n    },\n    \"tagPolicy\": {\n      \"public\": [\"full\", \"majorMinor\", \"major\"],\n      \"nonPublic\": [\"full\", \"majorMinor\", \"major\"]\n    },\n    \"nonPublicMode\": \"\",                   // Optional: \"full-only\" limits non-public tags to full version\n    \"aliases\": {\n      \"branch\": false,                      // Optional: add branch alias tag\n      \"sanitizedBranch\": false              // Optional: add lowercase sanitized branch alias tag\n    },\n    \"cleanup\": {\n      \"local\": \"auto\"                    // Auto: clean in CI, keep locally for dev\n    },\n    \"runner\": \"build\",                  // Optional: build, buildx, or auto\n    \"platform\": \"linux/amd64\",            // Optional: build platform\n    \"buildTarget\": \"export-stage\",        // Optional: docker build --target\n    \"buildOutput\": \"type=local,dest=./out\", // Optional: docker build --output\n    \"buildArgs\": { \"ENV\": \"prod\" },       // Optional: extra docker build args\n    \"secrets\": {\n      \"npm_token\": { \"env\": \"NPM_TOKEN\" },\n      \"signing_key\": { \"file\": \"./secrets/signing.key\" }\n    },\n    \"stages\": {\n      \"validate\": {\n        \"target\": \"validate\",\n        \"output\": \"type=local,dest=./stage-validate\"\n      },\n      \"test\": {\n        \"target\": \"test\",\n        \"output\": \"type=local,dest=./stage-test\"\n      }\n    }\n  },\n  \"git\": {\n    \"publicBranches\": [\"main\", \"release/*\"],\n    \"publicBranchesShortcut\": \"main,release/*\",\n    \"nonPublicBranches\": [\"feature/*\", \"hotfix/*\"],\n    \"nonPublicBranchesShortcut\": \"feature/*,hotfix/*\"\n  }\n}\n```\n\n#### Docker option reference\n\n| Setting | Type | Default | Env override | Notes |\n| --- | --- | --- | --- | --- |\n| `strictConfig` | boolean | `false` | `DOCKSHIP_STRICT_CONFIG` | When true, fails fast on invalid `.dockship/dockship.json` and on legacy flat compatibility keys |\n| `docker.file` | string | `Dockerfile` | `DOCKERFILE_PATH` | Path to the Dockerfile relative to the repo root |\n| `docker.context` | string | `.` | `DOCKER_CONTEXT` | Docker build context |\n| `docker.target.registry` | string | empty | `DOCKER_TARGET_REGISTRY` | Required for `dock build`, `dock ship`, and `dock all` |\n| `docker.target.repository` | string | empty | `DOCKER_TARGET_REPOSITORY` | Required for `dock build`, `dock ship`, and `dock all` |\n| `docker.login.registry` | string | empty | `DOCKER_LOGIN_REGISTRY` | Optional login registry override; defaults to `docker.target.registry` |\n| `docker.push.enabled` | boolean | `false` | `DOCKER_PUSH_ENABLED` | Enables pushing for `dock ship` and `dock all` |\n| `docker.push.branches` | string[] | `[]` | `DOCKER_PUSH_BRANCHES` | Branch allow-list; supports `*` wildcards |\n| `docker.push.branchesShortcut` | string | empty | none | Shortcut for push branch allow-list using comma/semicolon/newline delimiters |\n| `docker.push.denyNonPublicPush` | boolean | `false` | none | When `true`, non-public classified builds are not pushed |\n| `docker.tags.latest` | boolean | `false` | `DOCKER_TAG_LATEST` | Adds the `latest` tag in addition to semantic tags |\n| `docker.tags.stripPreReleaseNumber` | boolean | `true` | none | When `true`, strips the trailing commit-count number from the prerelease suffix on moving tags only. The full version tag is unaffected. Example: `1.2.3-beta.2` produces tags `1.2.3-beta.2`, `1-beta`, `1.2-beta`. Set to `false` to preserve `1-beta.2` and `1.2-beta.2`. |\n| `docker.tagPolicy.public` | string[] | `full,majorMinor,major` | none | Tag kinds for public builds (`full`, `majorMinor`, `major`, `latest`) |\n| `docker.tagPolicy.nonPublic` | string[] | `full,majorMinor,major` | none | Tag kinds for non-public builds |\n| `docker.nonPublicMode` | string | empty | none | `full-only` emits only the full version tag for non-public builds |\n| `docker.aliases.branch` | boolean | `false` | none | Adds branch alias tags (e.g., `Feature/demo` -> `Feature-demo`) |\n| `docker.aliases.sanitizedBranch` | boolean | `false` | none | Adds lowercase sanitized branch alias tags (e.g., `Feature/demo_branch` -> `feature-demo-branch`) |\n| `docker.aliases.sanitize` | boolean | `false` | none | When true, sanitizes the full emitted alias value after any prefix/suffix and rule formatting are applied |\n| `docker.aliases.prefix` | string | empty | none | Global alias prefix applied after alias generation |\n| `docker.aliases.suffix` | string | empty | none | Global alias suffix applied after alias generation |\n| `docker.aliases.maxLength` | number | `0` | none | Deterministic max alias length (`0` = unlimited) |\n| `docker.aliases.nonPublicPrefix` | string | empty | none | Optional prefix applied to alias tags when the build is classified non-public. Set to `np-` to prefix non-public aliases (for example `feature-demo` -> `np-feature-demo`) |\n| `docker.aliases.rules` | object[] | `[]` | none | Ordered alias rules, first-match-wins (`match`, `matchBranch`, `matchVersion`, `template`, `aliases`, `sanitize`, optional per-rule formatting) |\n| `docker.tags.aliases` | object | none | none | Alternate location for alias settings; merged into `docker.aliases` for compatibility |\n| `docker.cleanup.local` | `auto` \\| boolean | `auto` | `DOCKER_CLEANUP_LOCAL` | `auto` cleans up in CI and keeps images locally for dev. `true` always removes built tags after `dock build`/`dock all`; `false` never removes them. |\n| `docker.runner` | `build` \\| `buildx` \\| `auto` | `build` | `DOCKER_RUNNER` | Selects Docker runner command. `auto` prefers `docker buildx build` and falls back to `docker build` |\n| `docker.platform` | string | empty | `DOCKER_PLATFORM` | Passed to `docker build --platform` |\n| `docker.buildTarget` | string | empty | `DOCKER_BUILD_TARGET` | Passed to `docker build --target` |\n| `docker.buildOutput` | string or string[] | empty | `DOCKER_BUILD_OUTPUT` | Passed to `docker build --output`; this may be `type=local,dest=...` or other buildx output spec |\n| `docker.buildArgs` | object | `{}` | `DOCKER_BUILD_ARGS`, `DOCKER_BUILD_ARGS_FILE` | Key/value pairs passed as `--build-arg KEY=value`; appended before the auto-generated `APP_VERSION` build arg. `DOCKER_BUILD_ARGS` accepts JSON (`{\"K\":\"v\"}`) or semicolon-delimited `KEY=value;KEY2=value2`. `DOCKER_BUILD_ARGS_FILE` points to a JSON file containing a build-args object |\n| `docker.secrets` | object | `{}` | `DOCKER_SECRETS`, `DOCKER_SECRET_<ID>` | BuildKit secrets mapped to `--secret`. Each entry supports `{ \"env\": \"ENV_NAME\" }` or `{ \"file\": \"./path\" }`. Requires `docker.runner` `buildx` (or `auto` resolving to buildx). `DOCKER_SECRETS` accepts JSON object and `DOCKER_SECRET_<ID>` overrides by id |\n| `docker.stages` | object | `{}` | n/a | Stage definitions for `dock stage <name>` and `dock stage all`. Each stage may set `target`/`output`/`runner` to override `docker.buildTarget`, `docker.buildOutput`, `docker.runner` |\n| `docker.stageFallback` | boolean | `true` | n/a | When true, `dock stage all` runs a final no-target build after configured stages (default). |\n| `git.publicBranches` | string[] | `[]` | n/a | Optional patterns classifying builds as public |\n| `git.publicBranchesShortcut` | string | empty | n/a | Shortcut for public branch patterns using comma/semicolon/newline delimiters |\n| `git.nonPublicBranches` | string[] | `[]` | n/a | Optional patterns classifying builds as non-public |\n| `git.nonPublicBranchesShortcut` | string | empty | n/a | Shortcut for non-public branch patterns using comma/semicolon/newline delimiters |\n\n### Alias Tags\n\nAlias tags are additional Docker tags layered on top of semantic version tags. You can use simple toggles, rule-based aliases, or both together.\n\nSome rule-based settings can also rewrite the generated semantic tags themselves using `tagPrefix`, `tagSuffix`, `tagMaxLength`, or `tagNonPublicPrefix`.\n\nSimple options:\n\n- `docker.aliases.branch: true` adds a branch alias (sanitized path separators)\n- `docker.aliases.sanitizedBranch: true` adds a lowercase sanitized branch alias\n- `docker.aliases.sanitize: true` makes built-in branch alias output lowercase and sanitized by default\n\nExamples for branch `Feature/customer-west`:\n\n- `branch: true` -> `Feature-customer-west`\n- `sanitizedBranch: true` -> `feature-customer-west`\n\nNon-public prefix behavior:\n\n- `docker.aliases.nonPublicPrefix` is optional and defaults to empty\n- when set (for example `np-`), it is prepended to aliases only for non-public builds\n- non-public classification comes from branch classification (`git.nonPublicBranches`) or suffix/guardrail behavior\n\nGlobal alias formatting options:\n\n- `prefix`: prepend to all generated aliases\n- `suffix`: append to all generated aliases\n- `maxLength`: deterministic truncation (`0` means unlimited)\n\nRule-based aliases (`docker.aliases.rules`) are evaluated in order with first-match-wins selection. A matching rule can either emit additional alias tags from `template`/`alias`/`aliases`, transform the generated semantic tags with `tag*` settings, or both.\n\nImportant behavior:\n\n- If a rule only provides `tagPrefix`/`tagSuffix`/`tagMaxLength`/`tagNonPublicPrefix`, it rewrites semantic tags but does not emit a branch alias by itself.\n- If a rule provides `template`/`alias`/`aliases`, it emits alias tags in addition to any semantic tag transform.\n- `caseInsensitive` controls rule matching behavior and does not affect emitted tag formatting.\n\nRule shape:\n\n- `id`: stable identifier for plan trace output\n- `match`: wildcard (`*`) or regex (`regex:` prefix) pattern against the branch name, or an object with `branch` and `version` entries\n- `matchBranch`: wildcard or regex branch pattern shortcut\n- `matchVersion`: wildcard or regex version pattern shortcut, matched against `semVer2` when available or `version + suffix` otherwise\n- `caseInsensitive`: optional boolean to evaluate this rule case-insensitively\n- `template`: supports `$BRANCH`, `$BRANCH_SANITIZED`, `$0` (entire matched value), and capture references `$1..$9`\n- `alias`/`aliases`: static alias values\n- `sanitize`: `none`, `branch`, `sanitized`, or boolean (`true` => `sanitized`, `false` => `none`). When set on a rule, this sanitization applies to the complete alias value after prefix/suffix and rule formatting are combined, and also applies to semantic tag transforms produced by `tag*` settings.\n- `tagMode`: `append` or `replace`. When `replace`, semantic transforms from `tagPrefix`/`tagSuffix` wrap the original semantic tag rather than discarding it. Default is `replace`.\n- `prefix`/`suffix`/`maxLength`/`nonPublicPrefix`: optional per-rule alias formatting overrides\n- `tagPrefix`/`tagSuffix`/`tagMaxLength`/`tagNonPublicPrefix`: optional per-rule semantic tag transforms that rewrite the generated semantic tags\n\nTemplate tokens:\n\n- `$BRANCH`: raw normalized branch name\n- `$BRANCH_SANITIZED`: lowercase sanitized branch name\n- `$0`: entire matched value for wildcard/plain/regex patterns\n- `$1..$9`: regex capture groups from the matching rule pattern\n\nMatching behavior:\n\n- alias rules are case-sensitive by default\n- set `caseInsensitive: true` on a rule to match wildcard/regex patterns without case sensitivity\n\nExamples:\n\n- Transform-only rule:\n\n```json\n{\n  \"match\": \"topic/*\",\n  \"tagSuffix\": \"-$0\",\n  \"sanitize\": true\n}\n```\n\nThis rewrites semantic tags to `1.2.3-topic-auth` and does not emit a separate branch alias.\n\n- Alias-emitting rule:\n\n```json\n{\n  \"match\": \"release/*\",\n  \"template\": \"release-$0\",\n  \"sanitize\": false\n}\n```\n\nThis emits `release-release/1.2` as an alias (or sanitized form if `sanitize` is enabled).\n\n- Case-insensitive match:\n\n```json\n{\n  \"match\": \"Topic/*\",\n  \"caseInsensitive\": true,\n  \"template\": \"lane-$0\",\n  \"sanitize\": true\n}\n```\n\nThis matches `topic/Auth_Branch` as well as `Topic/Auth_Branch`.\n\n- Branch and version match:\n\n```json\n{\n  \"match\": {\n    \"branch\": \"topic/*\",\n    \"version\": \"*-g*\"\n  },\n  \"tagPrefix\": \"release-\",\n  \"tagSuffix\": \"-$0\",\n  \"tagMode\": \"replace\",\n  \"sanitize\": true\n}\n```\n\nThis matches only when both the branch and the resolved version suffix match, letting rules apply specifically to NBGV-style `-g...` versions.\n\nExample alias config:\n\n```json\n{\n  \"docker\": {\n    \"aliases\": {\n      \"rules\": [\n        {\n          \"id\": \"release-qa\",\n          \"match\": \"release/current-qa\",\n          \"tagSuffix\": \"-qa\"\n        }\n      ]\n    }\n  }\n}\n```\n\nWith branch `release/current-qa` and version `1.1.323`, this would produce `1-qa`, `1.1-qa`, and `1.1.323-qa`.\n\nAlias rule config example:\n\n```json\n{\n  \"docker\": {\n    \"aliases\": {\n      \"branch\": true,\n      \"sanitizedBranch\": false,\n      \"nonPublicPrefix\": \"np-\",\n      \"rules\": [\n        {\n          \"id\": \"release-lane\",\n          \"match\": \"regex:^release\\\\/(\\\\d+)\\\\.(\\\\d+)$\",\n          \"template\": \"rel-$1-$2\",\n          \"sanitize\": \"sanitized\"\n        },\n        {\n          \"id\": \"feature-lane\",\n          \"match\": \"feature/*\",\n          \"template\": \"feat-$BRANCH_SANITIZED\"\n        }\n      ]\n    }\n  }\n}\n```\n\n`branch`/`sanitizedBranch` toggles and `rules` are additive: both can be enabled at the same time.\n\nTo export files or artifacts from intermediate Dockerfile stages, set the runner to `buildx` (or `auto`) and configure target/output using `DOCKER_BUILD_TARGET` and `DOCKER_BUILD_OUTPUT`.\n\nExample:\n\n```bash\nDOCKER_RUNNER=buildx \\\nDOCKER_BUILD_TARGET=export-stage \\\nDOCKER_BUILD_OUTPUT='type=local,dest=./out' \\\nnpx dock build\n```\n\n### BuildKit Secrets (env and file)\n\nDockship maps `docker.secrets` (or `DOCKER_SECRETS`) to Docker BuildKit `--secret` flags.\n\n- `{ \"env\": \"ENV_NAME\" }` becomes `--secret id=<id>,env=ENV_NAME`\n- `{ \"file\": \"./path\" }` becomes `--secret id=<id>,src=./path`\n\nImportant behavior:\n\n- secrets require `docker.runner` `buildx` (or `auto` resolving to `buildx`)\n- secret values are provided from host/CI environment or files at build time\n- secrets are not copied into the Docker build context by dockship\n\nExample `dockship.json`:\n\n```json\n{\n  \"docker\": {\n    \"runner\": \"buildx\",\n    \"secrets\": {\n      \"npm_token\": { \"env\": \"NPM_TOKEN\" },\n      \"signing_key\": { \"file\": \"./secrets/signing.key\" }\n    }\n  }\n}\n```\n\nGitHub Actions note: GitHub does not automatically expose secrets as `./secrets/*` files. Secrets are exposed as workflow expressions and environment variables unless you explicitly write them to files.\n\nGitHub Actions (env-backed secret):\n\n```yaml\n- name: Build with dockship and BuildKit secret\n  run: npx dock build\n  env:\n    DOCKER_RUNNER: buildx\n    DOCKER_TARGET_REGISTRY: ${{ secrets.REGISTRY }}\n    DOCKER_TARGET_REPOSITORY: my-org/my-app\n    NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\nAzure DevOps (file-backed secret):\n\n```yaml\n- script: |\n    mkdir -p .secrets\n    printf \"%s\" \"$(SigningKey)\" > .secrets/signing.key\n    npx dock build\n  env:\n    DOCKER_RUNNER: buildx\n    DOCKER_TARGET_REGISTRY: $(DockerRegistry)\n    DOCKER_TARGET_REPOSITORY: my-org/my-app\n```\n\nExample:\n\n```bash\nDOCKER_RUNNER=buildx \\\nDOCKER_SECRETS='{\"npm_token\":{\"env\":\"NPM_TOKEN\"}}' \\\nNPM_TOKEN='token-value' \\\nnpx dock build\n```\n\nOptional registry login environment variables:\n\n- `DOCKER_LOGIN_USERNAME`\n- `DOCKER_LOGIN_PASSWORD`\n- `DOCKER_LOGIN_REGISTRY` (defaults to `docker.login.registry`, then `DOCKER_TARGET_REGISTRY`)\n\nWhen `DOCKER_LOGIN_USERNAME` and `DOCKER_LOGIN_PASSWORD` are set, dockship creates a temporary isolated Docker config, runs `docker login` for that invocation, and removes the temporary config afterward. This avoids changing the user's normal Docker login state.\n\nLegacy aliases remain supported for compatibility:\n\n- `DOCKER_AUTH_USERNAME`\n- `DOCKER_AUTH_PASSWORD`\n- `DOCKER_AUTH_REGISTRY`\n\n`dock ship` and `dock all` only push when both of these are true:\n\n- `docker.push.enabled` is `true`\n- the current branch matches `docker.push.branches` when a branch list is configured\n\nIf `docker.push.branches` is omitted or empty, any branch may push.\n\nIf `docker.push.denyNonPublicPush` is `true`, pushes are skipped for builds classified as non-public.\n\nBranch matching details:\n\n- patterns are matched against the full normalized branch name\n- `*` matches any sequence of characters\n- regex patterns are supported with `regex:` prefix, for example `regex:^release\\/\\d+\\.\\d+$`\n- examples: `main`, `develop`, `release/*`, `feature/*`\n- branch name detection uses common CI branch variables first, then falls back to `git rev-parse --abbrev-ref HEAD`\n- alias rules use ordered `first-match-wins` selection and still emit full plan trace for matched and non-matched rules\n\nLegacy flat keys are still accepted for compatibility:\n\n- `docker.dockerfile` → `docker.file`\n- `docker.targetRegistry` → `docker.target.registry`\n- `docker.targetRepository` → `docker.target.repository`\n- `docker.loginRegistry` → `docker.login.registry`\n- `docker.pushEnabled` → `docker.push.enabled`\n- `docker.pushBranches` → `docker.push.branches`\n- `docker.tagLatest` → `docker.tags.latest`\n- `git.qaBranches` → `git.nonPublicBranches`\n- `git.nextBranches` → `git.nonPublicBranches`\n\nWhen legacy flat keys are present, dockship emits a warning on stderr and continues using compatibility behavior.\n\nIf `strictConfig` (or `DOCKSHIP_STRICT_CONFIG=true`) is enabled, dockship fails instead of warning when legacy flat keys are present.\n\nNon-public guardrail behavior:\n\n- if a build resolves as non-public and the resolved version has no suffix, dockship applies `-pre` to generated `major` and `majorMinor` tags\n- the full version tag remains unchanged\n- this is visible in `dock plan --json` as `nonPublicGuardrailApplied: true`\n\nBranch source precedence for current branch detection:\n\n1. `GITHUB_HEAD_REF`\n2. `GITHUB_REF_NAME`\n3. `BUILD_SOURCEBRANCHNAME`\n4. `BUILD_SOURCEBRANCH`\n5. `BRANCH_NAME`\n6. `CI_COMMIT_REF_NAME`\n7. `TEAMCITY_BUILD_BRANCH`\n8. `GIT_BRANCH`\n9. fallback: `git rev-parse --abbrev-ref HEAD`\n\n`docker.cleanup.local: \"auto\"` resolves to `true` only when a CI signal is detected. Supported CI signals are:\n\n- `CI`\n- `GITHUB_ACTIONS`\n- `GITLAB_CI`\n- `TF_BUILD`\n- `BUILDKITE`\n- `TEAMCITY_VERSION`\n- `JENKINS_URL`\n\nEnvironment variable overrides (CI):\n\n- `DOCKER_TARGET_REGISTRY`\n- `DOCKER_TARGET_REPOSITORY`\n- `DOCKER_PUSH_ENABLED`\n- `DOCKER_PUSH_BRANCHES`\n- `DOCKER_TAG_LATEST`\n- `DOCKER_CLEANUP_LOCAL`\n- `DOCKER_RUNNER`\n- `DOCKSHIP_STRICT_CONFIG`\n- `DOCKER_LOGIN_USERNAME`\n- `DOCKER_LOGIN_PASSWORD`\n- `DOCKER_LOGIN_REGISTRY`\n\n### Version Providers\n\n`version.provider` supports `\"auto\"`, `\"nodejs\"`, `\"dotnet\"`, `\"gitversion\"`, `\"nbgv\"`, `\"env\"`, and any custom provider name.\n\nWhen `version.provider` is `\"auto\"`, dockship uses this order:\n\n1. `version.json` → `nbgv`\n2. `GitVersion.yml` → `gitversion`\n3. `package.json` → `nodejs`\n4. MSBuild and assembly metadata files → `dotnet`\n5. `DOCKSHIP_VERSION` env var → `env`\n\nIf a provider selected by auto-detection fails to resolve a valid version, dockship will retry with `env` when `DOCKSHIP_VERSION` (or `version.env.version`) is available.\n\nThe built-in `dotnet` provider auto-discovers:\n\n- `.csproj`, `.vbproj`, and `.fsproj`\n- `Directory.Build.props` and `Directory.Build.targets`\n- `VersionInfo.cs`, `VersionInfo.vb`, `VersionInfo.fs`\n- `AssemblyInfo.cs`, `AssemblyInfo.vb`, `AssemblyInfo.fs`\n\nWhen `dotnet` is available, project files are evaluated with `dotnet msbuild` preprocessing first so imported props and centrally managed version properties are respected. If that evaluation path is unavailable or does not yield a version, dockship falls back to scanning the discovered files directly.\n\nIf no config file exists, dockship uses `\"auto\"` by default.\n\n#### Version option reference\n\n| Setting | Type | Default | Description |\n| --- | --- | --- | --- |\n| `version.provider` | string | `auto` | Version provider name. Use `auto`, `nodejs`, `dotnet`, `gitversion`, `nbgv`, `env`, or a custom provider name |\n| `version.<provider>.providerPackage` | string | empty | npm package name or path to load for custom providers. Relative paths (starting with `./` or `../`) are resolved from the client repo root. |\n\n#### Node.js provider options\n\n| Setting | Type | Default | Env override | Description |\n| --- | --- | --- | --- | --- |\n| `version.nodejs.packageJsonPath` | string | `package.json` | `PACKAGE_JSON_PATH` | Path to the package file used for version resolution |\n| `version.nodejs.mode` | string | `fixed` | `NODEJS_VERSION_MODE` | `fixed` uses `package.json` version as-is; `git-height` appends commit count |\n\n#### Node.js (npm)\n\n```json\n{\n  \"version\": {\n    \"provider\": \"auto\",\n    \"nodejs\": {\n      \"packageJsonPath\": \"package.json\",\n      \"mode\": \"fixed\"  // or \"git-height\"\n    }\n  }\n}\n```\n\n#### .NET provider options\n\n| Setting | Type | Default | Env override | Description |\n| --- | --- | --- | --- | --- |\n| `version.dotnet.mode` | string | `fixed` | `DOTNET_VERSION_MODE` | `fixed` uses discovered version as-is; `git-height` appends commit count |\n| `version.dotnet.mainAssemblyInfoFilePath` | string | empty | `MAIN_ASSEMBLY_INFO_FILE_PATH` | Preferred explicit AssemblyInfo file |\n| `version.dotnet.assemblyInfoFilePaths` | string[] | `[]` | `ASSEMBLY_INFO_FILE_PATHS` | Additional AssemblyInfo file paths |\n| `version.dotnet.versionInfoFilePaths` | string[] | `[]` | `VERSION_INFO_FILE_PATHS` | Explicit VersionInfo file paths |\n| `version.dotnet.projectFilePaths` | string[] | `[]` | `PROJECT_FILE_PATHS` | Explicit project file paths for `.csproj`, `.vbproj`, or `.fsproj` |\n| `version.dotnet.csprojFilePaths` | string[] | `[]` | `CSPROJ_FILE_PATHS` | Legacy alias for explicit C# project file paths |\n| `version.dotnet.autoDiscover` | boolean | `true` | none | When `true`, scans the repo for supported MSBuild project files, `Directory.Build.props`, `Directory.Build.targets`, `VersionInfo.*`, and `AssemblyInfo.*` |\n\n#### .NET / MSBuild\n\n```json\n{\n  \"version\": {\n    \"provider\": \"dotnet\",\n    \"dotnet\": {\n      \"mode\": \"git-height\",\n      \"autoDiscover\": true\n    }\n  }\n}\n```\n\n#### GitVersion provider options\n\nThe `gitversion` provider executes the GitVersion CLI and maps its JSON output into dockship version fields.\n\nWhen `allowGlobalCommand` is enabled, dockship will use either `gitversion` or `dotnet-gitversion` from the host PATH.\n\n| Setting | Type | Default | Description |\n| --- | --- | --- | --- |\n| `version.gitversion.configFile` | string | `GitVersion.yml` | File used to detect and run GitVersion in auto mode |\n| `version.gitversion.allowGlobalCommand` | boolean | `true` | Allows the global `gitversion` command on the host |\n| `version.gitversion.useDocker` | boolean | `false` | Allows Docker fallback execution when host `gitversion` is unavailable |\n| `version.gitversion.dockerImage` | string | `gittools/gitversion:6.0.0` | Docker image used when `useDocker` is `true` |\n| `version.gitversion.additionalArgs` | string[] | `[]` | Additional CLI args passed to GitVersion |\n\n#### GitVersion\n\n```json\n{\n  \"version\": {\n    \"provider\": \"gitversion\",\n    \"gitversion\": {\n      \"configFile\": \"GitVersion.yml\",\n      \"allowGlobalCommand\": true,\n      \"useDocker\": false,\n      \"dockerImage\": \"gittools/gitversion:6.0.0\",\n      \"additionalArgs\": []\n    }\n  }\n}\n```\n\n#### Env provider options\n\nThe `env` provider reads a pre-computed version from an environment variable or inline config. It is the simplest way to supply a version when CI tooling (e.g. GitHub Actions, TeamCity, GitLab CI) has already computed one.\n\n| Setting | Type | Default | Description |\n| --- | --- | --- | --- |\n| `version.env.versionVar` | string | `DOCKSHIP_VERSION` | Name of the environment variable that holds the version string |\n| `version.env.version` | string | empty | Inline version override — takes priority over the env var |\n\n#### Env provider\n\n```json\n{\n  \"version\": {\n    \"provider\": \"env\",\n    \"env\": {\n      \"versionVar\": \"DOCKSHIP_VERSION\"\n    }\n  }\n}\n```\n\nOr supply a static version at build time:\n\n```json\n{\n  \"version\": {\n    \"provider\": \"env\",\n    \"env\": {\n      \"version\": \"1.0.0\"\n    }\n  }\n}\n```\n\nIn `auto` mode the `env` provider activates when `DOCKSHIP_VERSION` is set (or `version.env.version` is non-empty). It is evaluated last during detection, and also serves as a recovery fallback when an earlier detected provider fails to resolve a valid version.\n\n#### NBGV provider options\n\n| Setting | Type | Default | Description |\n| --- | --- | --- | --- |\n| `version.nbgv.useDocker` | boolean | `true` | Run nbgv inside a Docker container — no .NET SDK required on the host |\n| `version.nbgv.dockerImage` | string | `mcr.microsoft.com/dotnet/sdk:latest` | Docker image used when `useDocker` is `true` |\n| `version.nbgv.versionJsonFileName` | string | `version.json` | File used to detect and run NBGV |\n| `version.nbgv.dotnetToolManifestRelativePath` | string | `.config/dotnet-tools.json` | Tool manifest used when restoring local dotnet tools |\n| `version.nbgv.allowToolRestore` | boolean | `true` | Allows `dotnet tool restore` before retrying (host execution only) |\n| `version.nbgv.allowGlobalCommand` | boolean | `true` | Allows the global `nbgv` command as a fallback (host execution only) |\n| `version.nbgv.requireVersionJson` | boolean | `true` | When `true`, `version.json` must exist for the repo to be considered an NBGV repo |\n\n#### NBGV\n\n```json\n{\n  \"version\": {\n    \"provider\": \"nbgv\",\n    \"nbgv\": {\n      \"useDocker\": true,\n      \"dockerImage\": \"mcr.microsoft.com/dotnet/sdk:latest\",\n      \"versionJsonFileName\": \"version.json\",\n      \"allowToolRestore\": true,\n      \"allowGlobalCommand\": true\n    }\n  }\n}\n```\n\n### Git-Height Versioning\n\nAppends Git commit count to semantic versions for unique build identifiers:\n\n```bash\n# With mode: \"git-height\"\n# package.json: \"version\": \"0.1.0\"\n# Computed as: 0.1.0.<git-height>\n# Output: 0.1.0.78\n```\n\n## Commands\n\n| Command | Description |\n| ------- | ----------- |\n| `dock build` | Build Docker image with computed version |\n| `dock ship` | Push built image to registry |\n| `dock push` | Alias for `dock ship` |\n| `dock all` | Build and ship |\n| `dock version` | Show resolved version (JSON) |\n| `dock tags` | Show generated image tags |\n| `dock help` | Show available commands |\n\n## Provider Catalog\n\n### Built-in Providers\n\n| Name | Source | Auto-detected when |\n| --- | --- | --- |\n| **nodejs** | `package.json` | `package.json` exists at repo root |\n| **dotnet** | `.csproj` / `.vbproj` / `.fsproj` / `Directory.Build.props` / `AssemblyInfo.*` / `VersionInfo.*` | Any of those files are found |\n| **gitversion** | GitVersion CLI | `GitVersion.yml` exists at repo root |\n| **nbgv** | Nerdbank.GitVersioning | `version.json` exists at repo root |\n| **env** | `DOCKSHIP_VERSION` env var or inline config | `DOCKSHIP_VERSION` is set (last in chain), or a previously selected auto provider fails and env version input is available |\n\n### External Providers\n\nA third-party provider can be published as an npm package named `@agile-north/docker-ci-provider-<name>`. Install it and set `version.provider` to `<name>` — no `providerPackage` config needed:\n\n```bash\nnpm install -D @agile-north/dockship-provider-python\n```\n\n```json\n{\n  \"version\": {\n    \"provider\": \"python\",\n    \"python\": {\n      \"mode\": \"git-height\"\n    }\n  }\n}\n```\n\n### Writing Your Own Provider\n\nA provider is a CommonJS module that exports a single `resolveVersion(context)` function. You can ship it as an npm package or drop a file directly in your repo.\n\n#### Provider contract\n\n```js\n// my-version-provider.cjs\n\"use strict\";\n\nmodule.exports = {\n  resolveVersion(context) {\n    // context fields:\n    //   cwd           {string}  – working directory where dock was invoked\n    //   repoRoot      {string}  – absolute path to the repo root (.git parent)\n    //   buildConfig   {object}  – full merged dockship.json config\n    //   providerName  {string}  – resolved name of this provider (\"myprovider\")\n    //   providerConfig {object} – buildConfig.version.<providerName>\n    //   env           {object}  – process.env (or injected env in tests)\n\n    const version = context.env.MY_VERSION || \"1.0.0\";\n    const [major, minor, patch = \"0\"] = version.split(\".\");\n\n    return {\n      source: \"myprovider\",         // required – identifies the provider\n      version,                      // required – full version string (semver)\n      full: `${major}.${minor}.${patch}`, // required – numeric part only\n      major,                        // required\n      minor,                        // required\n      build: patch,\n      suffix: \"\",                   // prerelease label incl. leading \"-\"\n      semVer2: version,\n      assemblyVersion: \"\",\n      informationalVersion: \"\",\n      nuGetPackageVersion: \"\"\n    };\n  }\n};\n```\n\nAll five required fields (`source`, `version`, `full`, `major`, `minor`) must be non-empty strings or dockship will throw. Use `normalizeVersionInfo` from `@agile-north/dockship/lib/version/model.cjs` to fill in defaults automatically:\n\n```js\n\"use strict\";\nconst { normalizeVersionInfo } = require(\"@agile-north/dockship/lib/version/model.cjs\");\n\nmodule.exports = {\n  resolveVersion(context) {\n    const version = context.providerConfig.version || context.env.MY_VERSION;\n    if (!version) throw new Error(\"MY_VERSION is not set\");\n\n    return normalizeVersionInfo({ source: \"myprovider\", version });\n  }\n};\n```\n\n`normalizeVersionInfo` parses `major`, `minor`, `build`, `suffix`, and `semVer2` from `version` so you only need to supply what differs.\n\n#### Provider config is passed through\n\nAny keys you add under `version.<providerName>` in `dockship.json` are forwarded as `context.providerConfig` with no validation — use them for options specific to your provider:\n\n```json\n{\n  \"version\": {\n    \"provider\": \"myprovider\",\n    \"myprovider\": {\n      \"providerPackage\": \"./.dockship/my-version-provider.cjs\",\n      \"versionFile\": \"version.txt\"\n    }\n  }\n}\n```\n\n#### Provider resolution order\n\nWhen `loadProvider` runs for a given name it tries in order:\n\n1. **Bundled** – `lib/version/providers/<name>/index.cjs` inside dockship (built-ins only)\n2. **Scoped npm** – `@agile-north/docker-ci-provider-<name>` (installed in the consumer repo)\n3. **`providerPackage`** – value of `version.<name>.providerPackage`:\n   - Relative path (`./…` or `../…`) → resolved from the **client repo root**\n   - npm package name → resolved from `node_modules` as normal\n\n#### Local file in the client repo\n\nDrop the provider file anywhere in your repo — `.dockship/` is a natural home — and reference it with a relative path:\n\n```text\nyour-repo/\n├── .dockship/\n│   ├── dockship.json\n│   └── my-version-provider.cjs   ← provider lives here\n```\n\n```json\n{\n  \"version\": {\n    \"provider\": \"myprovider\",\n    \"myprovider\": {\n      \"providerPackage\": \"./.dockship/my-version-provider.cjs\"\n    }\n  }\n}\n```\n\n#### Publishing a provider package\n\nName the package `@agile-north/docker-ci-provider-<name>` so consumers can reference it by short name without `providerPackage`. The package entry point must export `resolveVersion(context)` as shown above.\n\n## Private npm Setup\n\n### GitHub Packages\n\nAdd `.npmrc` to your client repo:\n\n```ini\n@agile-north:registry=https://npm.pkg.github.com\nalways-auth=true\n//npm.pkg.github.com/:_authToken=${NPM_TOKEN}\n```\n\n### Local Development Token\n\nSet user-level env var (Windows PowerShell):\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"NPM_TOKEN\",\"<your-token>\",\"User\")\n```\n\nThen install:\n\n```bash\nnpm i -D @agile-north/dockship\n```\n\n## CI/CD Integration\n\n### TeamCity\n\n```kotlin\nsteps {\n    script {\n        name = \"Docker Build & Ship\"\n        scriptContent = \"\"\"\n            #!/usr/bin/env bash\n            set -euo pipefail\n\n            docker run --rm \\\n              -v \"$PWD:/workspace\" \\\n              -w /workspace \\\n              -v /var/run/docker.sock:/var/run/docker.sock \\\n              -e DOCKER_TARGET_REGISTRY \\\n              -e DOCKER_TARGET_REPOSITORY \\\n              -e DOCKER_PUSH_ENABLED \\\n              -e DOCKER_PUSH_BRANCHES \\\n              node:18-alpine \\\n              npx dock all\n        \"\"\".trimIndent()\n    }\n}\n```\n\n### GitHub Actions\n\n```yaml\n- name: Docker Build & Ship\n  run: npx dock all\n  env:\n    DOCKER_TARGET_REGISTRY: ${{ secrets.REGISTRY }}\n    DOCKER_TARGET_REPOSITORY: my-org/my-app\n    DOCKER_PUSH_ENABLED: true\n    DOCKER_PUSH_BRANCHES: main,develop\n    NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\n## Examples\n\n### Zero-Config Node.js Repo\n\nIf your repo has a `package.json`, you can often start with env only and no `.dockship/dockship.json`:\n\n```bash\nDOCKER_TARGET_REGISTRY=registry.example.com \\\nDOCKER_TARGET_REPOSITORY=my-org/my-app \\\nnpx dock build\n```\n\n### Branch-Restricted Pushes\n\n```json\n{\n  \"docker\": {\n    \"push\": {\n      \"enabled\": true,\n      \"branches\": [\"main\", \"develop\", \"release/*\"]\n    }\n  }\n}\n```\n\n### CI Build Without Retaining Local Images\n\nUseful on self-hosted runners or long-lived agents that should build for validation but not accumulate Docker images locally:\n\n```json\n{\n  \"docker\": {\n    \"target\": {\n      \"registry\": \"ghcr.io\",\n      \"repository\": \"my-org/my-app\"\n    },\n    \"push\": {\n      \"enabled\": false\n    },\n    \"cleanup\": {\n      \"local\": true\n    }\n  }\n}\n```\n\nOr configure it by env var in CI:\n\n```bash\nDOCKER_PUSH_ENABLED=false\nDOCKER_CLEANUP_LOCAL=auto\nnpx dock build\n```\n\n`DOCKER_CLEANUP_LOCAL` accepts `auto`, `true`, or `false`.\n\n### Monorepo Services\n\n```json\n{\n  \"docker\": {\n    \"file\": \"services/api/Dockerfile\",\n    \"context\": \"services/api\",\n    \"target\": {\n      \"repository\": \"my-org/api\"\n    }\n  },\n  \"version\": {\n    \"provider\": \"nodejs\",\n    \"nodejs\": {\n      \"packageJsonPath\": \"services/api/package.json\"\n    }\n  }\n}\n```\n\n### Full-Stack (Node.js Frontend + .NET Backend)\n\nUse dockship once with multi-stage Dockerfile:\n\n```dockerfile\nFROM node:18 AS frontend\nWORKDIR /app\nCOPY ClientApp .\nRUN npm ci && npm run build\n\nFROM mcr.microsoft.com/dotnet/sdk:8.0 AS backend\nWORKDIR /bff\nCOPY . .\nRUN dotnet publish -o /publish\n\nFROM mcr.microsoft.com/dotnet/aspnet:8.0\nCOPY --from=frontend /app/dist /app/dist\nCOPY --from=backend /publish /app\nENTRYPOINT [\"dotnet\", \"Portal.dll\"]\n```\n\nVersion from Node.js:\n\n```json\n{\n  \"docker\": {\n    \"target\": {\n      \"repository\": \"my-org/portal\"\n    }\n  },\n  \"version\": {\n    \"provider\": \"nodejs\",\n    \"nodejs\": {\n      \"packageJsonPath\": \"ClientApp/package.json\",\n      \"mode\": \"git-height\"\n    }\n  }\n}\n```\n\n### .NET Services\n\n```json\n{\n  \"version\": {\n    \"provider\": \"dotnet\",\n    \"dotnet\": {\n      \"mode\": \"git-height\",\n      \"autoDiscover\": true\n    }\n  }\n}\n```\n\n### NBGV Repo\n\n```json\n{\n  \"version\": {\n    \"provider\": \"nbgv\",\n    \"nbgv\": {\n      \"useDocker\": true,\n      \"dockerImage\": \"mcr.microsoft.com/dotnet/sdk:latest\",\n      \"versionJsonFileName\": \"version.json\",\n      \"allowToolRestore\": true,\n      \"allowGlobalCommand\": true\n    }\n  }\n}\n```\n\n## Environment Variables\n\n### Runtime\n\n- `DOCKER_TARGET_REGISTRY` – override `docker.target.registry`\n- `DOCKER_TARGET_REPOSITORY` – override `docker.target.repository`\n- `DOCKERFILE_PATH` – override `docker.file`\n- `DOCKER_CONTEXT` – override `docker.context`\n- `DOCKER_PUSH_ENABLED` – \"true\"/\"false\", override `docker.push.enabled`\n- `DOCKER_PUSH_BRANCHES` – comma/semicolon/newline separated branch patterns, supports `*`\n- `DOCKER_TAG_LATEST` – \"true\"/\"false\", override `docker.tags.latest`\n- `DOCKER_CLEANUP_LOCAL` – `auto`/`true`/`false`, remove locally built tags after `dock build` and `dock all`\n- `DOCKER_RUNNER` – `build`/`buildx`/`auto`, override `docker.runner`\n- `DOCKER_BUILD_TARGET` – override `docker.buildTarget` (`--target`)\n- `DOCKER_BUILD_OUTPUT` – override `docker.buildOutput` (`--output`)\n- `DOCKER_STAGES` – JSON object to override `docker.stages` for dynamic stage pipelines\n- `DOCKER_PLATFORM` – override `docker.platform`\n- `DOCKER_BUILD_ARGS` – build args as JSON (`{\"ENV\":\"prod\"}`) or semicolon-delimited `KEY=value;KEY2=value2`; overrides `docker.buildArgs`\n- `DOCKER_BUILD_ARGS_FILE` – path to JSON file containing build args object; overrides `docker.buildArgs`\n- `DOCKER_SECRETS` – JSON object mapping secret ids to `{ \"env\": \"ENV_NAME\" }` or `{ \"file\": \"./path\" }`; overrides `docker.secrets`\n- `DOCKER_SECRET_<ID>` – direct env secret override for a secret id (`DOCKER_SECRET_NPM_TOKEN=...` becomes `--secret id=npm_token,env=DOCKER_SECRET_NPM_TOKEN`)\n- `NPM_TOKEN` – for private npm (if using @agile-north providers)\n\n### Provider-Specific\n\n- `NODEJS_VERSION_MODE` – override version mode (fixed/git-height)\n- `PACKAGE_JSON_PATH` – override package.json location\n- `DOTNET_VERSION_MODE` – override .NET version mode (fixed/git-height)\n- `MAIN_ASSEMBLY_INFO_FILE_PATH` – explicit main AssemblyInfo file path\n- `ASSEMBLY_INFO_FILE_PATHS` – comma/semicolon separated AssemblyInfo file paths\n- `VERSION_INFO_FILE_PATHS` – comma/semicolon separated VersionInfo file paths\n- `CSPROJ_FILE_PATHS` – comma/semicolon separated `.csproj` file paths\n- `DOCKSHIP_VERSION` – explicit version string consumed by the `env` provider (also triggers `env` auto-detection when set)\n\n## Troubleshooting\n\n### \"Provider not found\"\n\n- Check `version.provider` in `dockship.json` matches the installed provider name\n- For `@agile-north` scoped packages: ensure it is installed (`npm ls @agile-north/docker-ci-provider-<name>`)\n- For `providerPackage` relative paths: verify the path is relative to your **repo root** (e.g. `./.dockship/my-provider.cjs`)\n- For `providerPackage` npm packages: verify the package is in `node_modules`\n\n### \"Could not auto-detect version provider\"\n\n- Add `.dockship/dockship.json` with `version.provider`\n- Or add a supported version source file such as `version.json`, `package.json`, or a `.csproj`\n- Or set the `DOCKSHIP_VERSION` env var to supply a version directly (activates the `env` provider as a last resort)\n\n### \"No version found\"\n\n- Verify version source file exists (package.json, .csproj, version.json)\n- Check `version.provider` config and associated path settings are correct\n\n### Docker login fails in CI\n\n- Ensure `DOCKER_TARGET_REGISTRY` is set in env\n- For private registries, either run `docker login` before build or provide `DOCKER_LOGIN_USERNAME` and `DOCKER_LOGIN_PASSWORD`\n\n### Git height not incrementing\n\n- Requires `.git` directory (not in Docker container by default)\n- Mount repo root and git metadata, for example: `-v \"$PWD:/workspace\" -v \"$PWD/.git:/workspace/.git\"`\n\n## License\n\nMIT\n\n---\n\nMade by **NRTH** • [www.nrth.com](https://www.nrth.com)\n","readmeFilename":"README.md"}