-
Notifications
You must be signed in to change notification settings - Fork 1
GDL-9 publish npm package to registry #206
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: development/7.10
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| --- | ||
| name: Release | ||
|
|
||
| run-name: release ${{ inputs.tag }} | ||
|
|
||
| on: | ||
| workflow_dispatch: | ||
|
tcarmet marked this conversation as resolved.
|
||
| inputs: | ||
| tag: | ||
| description: 'Tag to be released' | ||
| required: true | ||
|
|
||
| jobs: | ||
| publish: | ||
| permissions: | ||
| packages: write | ||
| id-token: write | ||
| contents: read | ||
| env: | ||
| VERSION: ${{ inputs.tag }} | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
| - name: Set env vars | ||
| run: | | ||
| echo PKG_VERSION="$(jq -r .version < package.json)" >> $GITHUB_ENV | ||
| echo PKG_NAME="$(jq -r .name < package.json)" >> $GITHUB_ENV | ||
| echo PKG_BASENAME="$(basename $(jq -r .name < package.json))" >> $GITHUB_ENV | ||
| - name: Ensure the branch is protected | ||
| run: | | ||
| if [[ "${{ github.ref_protected }}" = "false" ]]; then | ||
| echo "::error::The branch ${{ github.ref }} is not protected" | ||
| exit 1 | ||
| fi | ||
| - name: Ensure tag has not been released | ||
| run: | | ||
| TAG_EXISTS=$(git tag -l "${{ inputs.tag }}") | ||
| if [[ -n "$TAG_EXISTS" ]]; then | ||
| echo "::error::The tag ${{ inputs.tag }} already exists" | ||
| exit 1 | ||
| fi | ||
| - name: Ensure version is properly set | ||
| run: | | ||
| if ! [[ "$PKG_VERSION" = "$VERSION" ]]; then | ||
| echo "::error file=package.json,line=$(sed -n '/"version":/=' package.json)::The tag $VERSION must match the version $PKG_VERSION specified in package.json" | ||
| exit 1 | ||
| fi | ||
| - name: Setup node with GitHub Packages | ||
| uses: actions/setup-node@v4 | ||
| with: | ||
| cache: yarn | ||
| node-version: '16' | ||
| registry-url: https://npm.pkg.github.com | ||
|
tcarmet marked this conversation as resolved.
|
||
| - name: install dependencies | ||
| run: yarn install --frozen-lockfile | ||
| - name: Publish to GitHub Packages | ||
| run: npm publish --provenance | ||
| env: | ||
| NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| - name: Setup node with npmjs.org | ||
| uses: actions/setup-node@v4 | ||
| with: | ||
| registry-url: https://registry.npmjs.org | ||
| - name: Publish to npmjs.org | ||
| run: npm publish --provenance | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. what happens if the push to
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You wanna change the order, this way if it fails on npm it didn't published on GitHub packages? Also let's try not to overthink this too much, let's get some field experience first.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't want to change the order, I want to merge something where we have a path, in case of failure : because such failures do and will happen, and typically when it happens it is at the worst of times... So it is really not overthinking, but actually just thinking it through, to try and have some way to finish the release anyway when we need it.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I see, ran a couple of test and confirm that we will face some failure if for example we want to re-publish a package to GitHub (I guess the same will happen on npm): npm error code E409
npm error 409 Conflict - PUT https://npm.pkg.github.com/@scality%2feslint-config - Cannot publish over existing version
npm error A complete log of this run can be found in: /home/codespace/.npm/_logs/2025-02-21T21_38_24_404Z-debug-0.logNow, my main concern here, is not towards what you want to apply, it's mostly that we are adding too much code/logic into something that as far as we established will be copy pasted. So if we are duplicating code, let's keep it "dumb" even if the feature are limited. But if we want to add more checks and all, I rather we develop an action and reuse that code, otherwise it will be a pain to maintain across 20 different repos. Let me know which path you prefer, either are fine by me I don't mind developing an action for it.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. sorry for the delay, this happened before holiday, and missed it when coming back... the point is not to try and overthink it, but really just to be prepared for failure: i.e. be sure we now how we can we "fix" the release when it fails (and be able to do it, even when it fails at worst of time)... Some procedure could be acceptable (though it may need permissions, like to delete the release from NPM and/or GH Packages) I am guessing the simplest way to do this is to split this into 4 jobs, so they may be retried:
Notes:
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No worries for the delay, down to split the jobs, that's actually how I originally proposed this PR if I remember correctly, but was redirected to a single job under the argument that we are building/installing the package twice and not technically publishing the same package. I honestly think it's fine, and the benefit of having this capability to retry outweighs the fact that we are building twice. But stating it here just in case we don't want that.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think installing and building should be done just once (esp. since it can be flaky, and may break cache), but this can be done by storing an artifact: esp. if/when we retry publishing, we don't want to actually rebuild and risk having something different... |
||
| env: | ||
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | ||
| - name: Create Release | ||
| uses: softprops/action-gh-release@v2 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| tag_name: ${{ inputs.tag }} | ||
| name: Release ${{ inputs.tag }} | ||
| target_commitish: ${{ github.sha }} | ||
|
tcarmet marked this conversation as resolved.
|
||
| append_body: | | ||
| Github Packages: https://github.com/${{ github.repository }}/pkgs/npm/${{ env.PKG_BASENAME }} | ||
| npmjs: https://www.npmjs.com/package/${{ env.PKG_NAME }}/v/${{ env.PKG_VERSION }} | ||
|
tcarmet marked this conversation as resolved.
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,43 +1,49 @@ | ||
| { | ||
| "name": "eslint-config-scality", | ||
| "name": "@scality/eslint-config", | ||
| "version": "7.10.2", | ||
| "description": "ESLint config for Scality's Node.js coding guidelines", | ||
| "bin": { | ||
| "mdlint": "./bin/mdlint.js" | ||
| "mdlint": "bin/mdlint.js" | ||
| }, | ||
| "main": "index.js", | ||
| "scripts": { | ||
| "test": "npm run --silent lint && npm run --silent lint_md", | ||
| "lint": "node_modules/.bin/eslint -c index.js $(git ls-files '*.js')", | ||
| "lint": "eslint -c index.js $(git ls-files '*.js')", | ||
| "lint_md": "node bin/mdlint.js $(git ls-files '*.md')" | ||
| }, | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "https://github.com/scality/Guidelines" | ||
| "url": "git+https://github.com/scality/Guidelines.git" | ||
| }, | ||
| "dependencies": { | ||
| "commander": "1.3.2", | ||
| "markdownlint": "^0.25.1" | ||
| }, | ||
| "bugs": { | ||
| "url": "https://github.com/scality/Guidelines/issues" | ||
| }, | ||
| "devDependencies": { | ||
| "babel-eslint": "6.1.2", | ||
| "eslint": "^8.7.0", | ||
| "eslint-config-airbnb": "6.2.0" | ||
| }, | ||
| "keywords": [ | ||
| "eslint", | ||
| "eslintconfig", | ||
| "config", | ||
| "airbnb", | ||
| "scality", | ||
| "javascript", | ||
| "markdown", | ||
| "scality", | ||
| "styleguide" | ||
| ], | ||
| "author": "Giorgio Regni", | ||
| "author": "Scality Object Squad <object-squad@scality.com>", | ||
| "license": "Apache-2.0", | ||
| "homepage": "https://github.com/scality/Guidelines", | ||
| "engines": { | ||
| "node": ">=16" | ||
| } | ||
| }, | ||
| "publishConfig": { | ||
| "access": "public" | ||
| }, | ||
| "files": [ | ||
| "bin", | ||
| "*.[c]js" | ||
| ] | ||
| } |
Uh oh!
There was an error while loading. Please reload this page.