# This workflow will run tests using node and then publish a package to the npm registry when a release is created # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages name: Node.js Package on: pull_request: push: branches: - main - master jobs: test: runs-on: ubuntu-latest steps: # Clone ether/etherpad-lite to ../etherpad-lite so that ep_etherpad-lite # can be "installed" in this plugin's node_modules. The checkout v2 action # doesn't support cloning outside of $GITHUB_WORKSPACE (see # https://github.com/actions/checkout/issues/197), so the repo is first # cloned to etherpad-lite then moved to ../etherpad-lite. To avoid # conflicts with this plugin's clone, etherpad-lite must be cloned and # moved out before this plugin's repo is cloned to $GITHUB_WORKSPACE. - uses: actions/checkout@v3 with: repository: ether/etherpad-lite path: etherpad-lite - run: mv etherpad-lite .. # etherpad-lite has been moved outside of $GITHUB_WORKSPACE, so it is now # safe to clone this plugin's repo to $GITHUB_WORKSPACE. - uses: actions/checkout@v3 - uses: pnpm/action-setup@v3 name: Install pnpm with: version: 8 run_install: false - name: Get pnpm store directory shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - uses: actions/cache@v4 name: Setup pnpm cache with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- # All of ep_etherpad-lite's devDependencies are installed because the # plugin might do `require('ep_etherpad-lite/node_modules/${devDep}')`. # Eventually it would be nice to create an ESLint plugin that prohibits # Etherpad plugins from piggybacking off of ep_etherpad-lite's # devDependencies. If we had that, we could change this line to only # install production dependencies. - run: pnpm i && pnpm link --global - run: cd ../etherpad-lite/src && pnpm i && pnpm link $PLUGIN_NAME - run: pnpm run test - run: npm run lint publish-npm: if: github.event_name == 'push' needs: test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: pnpm/action-setup@v3 name: Install pnpm with: version: 8 run_install: false - name: Get pnpm store directory shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - uses: actions/cache@v4 name: Setup pnpm cache with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Bump version (patch) run: | LATEST_TAG=$(git describe --tags --abbrev=0) || exit 1 NEW_COMMITS=$(git rev-list --count "${LATEST_TAG}"..) || exit 1 [ "${NEW_COMMITS}" -gt 0 ] || exit 0 git config user.name 'github-actions[bot]' git config user.email '41898282+github-actions[bot]@users.noreply.github.com' pnpm i pnpm version patch git push --follow-tags # This is required if the package has a prepare script that uses something # in dependencies or devDependencies. - run: pnpm i # `npm publish` must come after `git push` otherwise there is a race # condition: If two PRs are merged back-to-back then master/main will be # updated with the commits from the second PR before the first PR's # workflow has a chance to push the commit generated by `npm version # patch`. This causes the first PR's `git push` step to fail after the # package has already been published, which in turn will cause all future # workflow runs to fail because they will all attempt to use the same # already-used version number. By running `npm publish` after `git push`, # back-to-back merges will cause the first merge's workflow to fail but # the second's will succeed. - run: npm publish env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} - name: Add package to etherpad organization run: npm access grant read-write etherpad:developers env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}