Skip to content

Merge pull request #99 from rainlanguage/2025-08-13-maximize-moar #29

Merge pull request #99 from rainlanguage/2025-08-13-maximize-moar

Merge pull request #99 from rainlanguage/2025-08-13-maximize-moar #29

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 }}