Merge pull request #99 from rainlanguage/2025-08-13-maximize-moar #29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: NPM Packages Release | |
| on: | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| release: | |
| if: ${{ github.ref == 'refs/heads/main' && !startsWith(github.event.head_commit.message, 'NPM Package Release') }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| id-token: write | |
| contents: write | |
| outputs: | |
| version: ${{ env.NEW_VERSION }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ssh-key: ${{ secrets.PUBLISH_PRIVATE_KEY }} | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - uses: DeterminateSystems/nix-installer-action@main | |
| with: | |
| determinate: true | |
| - uses: DeterminateSystems/flakehub-cache-action@main | |
| - name: Install NodeJS v22 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: "npm" | |
| - run: nix develop -c rainix-sol-prelude | |
| - name: Test JS/TS Binding | |
| run: nix develop -c test-js-bindings | |
| - name: Git Config | |
| run: | | |
| git config --global user.email "${{ secrets.CI_GIT_EMAIL }}" | |
| git config --global user.name "${{ secrets.CI_GIT_USER }}" | |
| # get hash of latest published pkgs from npm and concat them | |
| - name: Get Old Hash | |
| run: | | |
| OLD_HASH=$(npm view @rainlanguage/float@latest dist.shasum 2>/dev/null || echo "none") | |
| echo "OLD_HASH=$OLD_HASH" >> $GITHUB_ENV | |
| echo "old hash: $OLD_HASH" | |
| # calc hash of current workspace pkgs by packing them and concat them | |
| - name: Get New Hash | |
| run: | | |
| NEW_HASH=$(npm pack --silent | xargs shasum | cut -c1-40) | |
| echo "NEW_HASH=$NEW_HASH" >> $GITHUB_ENV | |
| echo "new hash: $NEW_HASH" | |
| rm -f *.tgz | |
| # from here on, we'll skip if OLD_HASH and NEW_HASH are the same (ie no publish) | |
| # this means we need to skip every step by using an if statement. | |
| # set npm version | |
| - name: Set Version | |
| if: ${{ env.OLD_HASH != env.NEW_HASH }} | |
| run: | | |
| NEW_VERSION=$(npm version prerelease --preid alpha --no-git-tag-version) | |
| echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV | |
| # Commit changes and tag | |
| - name: Commit And Tag | |
| if: ${{ env.OLD_HASH != env.NEW_HASH }} | |
| run: | | |
| git add "package.json" | |
| git add "package-lock.json" | |
| git commit -m "NPM Package Release v${{ env.NEW_VERSION }}" | |
| git tag npm-v${{ env.NEW_VERSION }} | |
| # Push the commit to remote | |
| - name: Push Changes To Remote | |
| if: ${{ env.OLD_HASH != env.NEW_HASH }} | |
| run: | | |
| git push origin | |
| git push -u origin npm-v${{ env.NEW_VERSION }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # Create float npm package tarball | |
| - name: Create float NPM Package Tarball | |
| if: ${{ env.OLD_HASH != env.NEW_HASH }} | |
| run: echo "NPM_PACKAGE=$(npm pack --silent)" >> $GITHUB_ENV | |
| - name: Rename float NPM Package Tarball | |
| if: ${{ env.OLD_HASH != env.NEW_HASH }} | |
| run: mv ${{ env.NPM_PACKAGE }} float_npm_package_${{ env.NEW_VERSION }}.tgz | |
| # publish float pkg to npm | |
| - name: Publish float pkg To NPM | |
| if: ${{ env.OLD_HASH != env.NEW_HASH }} | |
| uses: JS-DevTools/npm-publish@v3 | |
| with: | |
| token: ${{ secrets.NPM_TOKEN }} | |
| access: public | |
| package: float_npm_package_${{ env.NEW_VERSION }}.tgz | |
| # Create gitHub release with tarballs | |
| - name: Create GitHub Release with float pkg | |
| if: ${{ env.OLD_HASH != env.NEW_HASH }} | |
| id: gh_release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: npm-v${{ env.NEW_VERSION }} | |
| name: NPM Package Release v${{ env.NEW_VERSION }} | |
| files: | | |
| float_npm_package_${{ env.NEW_VERSION }}.tgz | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |