diff --git a/.github/actions/compress_sign_and_upload/action.yml b/.github/actions/compress_sign_and_upload/action.yml new file mode 100644 index 00000000..fdc7dede --- /dev/null +++ b/.github/actions/compress_sign_and_upload/action.yml @@ -0,0 +1,43 @@ +name: Compress and Sign +description: 'Compresses package and signs with garasign' + +inputs: + garasign_username: + description: 'Garasign username input for drivers-github-tools/garasign/gpg-sign' + required: true + garasign_password: + description: 'Garasign password input for drivers-github-tools/garasign/gpg-sign' + required: true + artifactory_username: + description: 'Artifactory username input for drivers-github-tools/garasign/gpg-sign' + required: true + artifactory_password: + description: 'Artifactory password input for drivers-github-tools/garasign/gpg-sign' + required: true + +runs: + using: composite + steps: + - run: npm pack + shell: bash + + - name: Get release version and release package file name + id: vars + shell: bash + run: | + package_version=$(jq --raw-output '.version' package.json) + echo "package_version=${package_version}" >> "$GITHUB_OUTPUT" + echo "package_file=bson-${package_version}.tgz" >> "$GITHUB_OUTPUT" + + - name: Create detached signature + uses: mongodb-labs/drivers-github-tools/garasign/gpg-sign@v1 + with: + filenames: ${{ steps.vars.package_file }} + garasign_username: ${{ inputs.garasign_username }} + garasign_password: ${{ inputs.garasign_password }} + artifactory_username: ${{ inputs.artifactory_username }} + artifactory_password: ${{ inputs.artifactory_password }} + + - name: "Upload release artifacts" + run: gh release upload v${{ steps.vars.package_version }} ${{ steps.vars.package_file }}.sig + shell: bash \ No newline at end of file diff --git a/.github/workflows/release-5.x.yml b/.github/workflows/release-5.x.yml index d0958648..88f94317 100644 --- a/.github/workflows/release-5.x.yml +++ b/.github/workflows/release-5.x.yml @@ -11,21 +11,30 @@ permissions: name: release-5x jobs: - release-please: + release_please: runs-on: ubuntu-latest + outputs: + release_created: ${{ steps.release.outputs.release_created }} steps: - id: release uses: google-github-actions/release-please-action@v4 with: target-branch: 5.x - - # If release-please created a release, publish to npm - - if: ${{ steps.release.outputs.release_created }} - uses: actions/checkout@v4 - - if: ${{ steps.release.outputs.release_created }} - name: actions/setup + + compress-sign-and-upload: + needs: [release_please] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: actions/setup uses: ./.github/actions/setup - - if: ${{ steps.release.outputs.release_created }} - run: npm publish --provenance --tag=5x + - name: actions/compress_sign_and_upload + uses: ./.github/actions/compress_sign_and_upload + with: + garasign_username: ${{ secrets.GRS_CONFIG_USER1_USERNAME }} + garasign_password: ${{ secrets.GRS_CONFIG_USER1_PASSWORD }} + artifactory_username: ${{ secrets.ARTIFACTORY_USER }} + artifactory_password: ${{ secrets.ARTIFACTORY_PASSWORD }} + - run: npm publish --provenance --tag=5x env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b58b4a44..16068041 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,19 +11,28 @@ permissions: name: release jobs: - release-please: + release_please: runs-on: ubuntu-latest + outputs: + release_created: ${{ steps.release.outputs.release_created }} steps: - id: release uses: google-github-actions/release-please-action@v4 - # If release-please created a release, publish to npm - - if: ${{ steps.release.outputs.release_created }} - uses: actions/checkout@v4 - - if: ${{ steps.release.outputs.release_created }} - name: actions/setup + compress_sign_and_upload: + needs: [release_please] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: actions/setup uses: ./.github/actions/setup - - if: ${{ steps.release.outputs.release_created }} - run: npm publish --provenance + - name: actions/compress_sign_and_upload + uses: ./.github/actions/compress_sign_and_upload + with: + garasign_username: ${{ secrets.GRS_CONFIG_USER1_USERNAME }} + garasign_password: ${{ secrets.GRS_CONFIG_USER1_PASSWORD }} + artifactory_username: ${{ secrets.ARTIFACTORY_USER }} + artifactory_password: ${{ secrets.ARTIFACTORY_PASSWORD }} + - run: npm publish --provenance env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/README.md b/README.md index 7c9c8c71..f48e435a 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,25 @@ You can learn more about it in [the specification](http://bsonspec.org). - [Documentation](#documentation) - [FAQ](#faq) + +### Release Integrity + +The GitHub release contains a detached signature file for the NPM package (named +`bson-X.Y.Z.tgz.sig`). + +The following command returns the link npm package. +```shell +npm view bson@vX.Y.Z dist.tarball +``` + +Using the result of the above command, a `curl` command can return the official npm package for the release. + +To verify the integrity of the downloaded package, run the following command: +```shell +gpg --verify bson-X.Y.Z.tgz.sig bson-X.Y.Z.tgz +``` + + ## Bugs / Feature Requests Think you've found a bug? Want to see a new feature in `bson`? Please open a case in our issue management tool, JIRA: