name: NPM on: [push, pull_request] jobs: build: name: Build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/cache@v2 with: path: ~/.npm key: ${{ runner.os }}-wechaty-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-wechaty- - name: Use Node.js 16 uses: actions/setup-node@v2 with: node-version: [12, 14, 16] - name: Install Dependencies run: | node --version npm --version npm install - name: Test run: npm test pack: name: Pack needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/cache@v2 with: path: ~/.npm key: ${{ runner.os }}-wechaty-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-wechaty- - uses: actions/setup-node@v2 with: node-version: 16 - run: npm install - run: ./scripts/generate-version.sh - run: ./scripts/npm-pack-testing.sh env: WECHATY_PUPPET_PADPLUS_TOKEN: ${{ secrets.WECHATY_PUPPET_PADPLUS_TOKEN }} publish: if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/v')) name: Publish needs: [build, pack] runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/cache@v2 with: path: ~/.npm key: ${{ runner.os }}-wechaty-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-wechaty- - uses: actions/setup-node@v2 with: node-version: 16 registry-url: https://registry.npmjs.org/ - run: npm install - run: ./scripts/generate-version.sh - run: ./scripts/package-publish-config-tag.sh - run: npm run dist - name: Check Branch id: check-branch run: | if [[ ${{ github.ref }} =~ ^refs/heads/(master|v[0-9]+\.[0-9]+.*)$ ]]; then echo ::set-output name=match::true fi # See: https://stackoverflow.com/a/58869470/1123955 - name: Is A Publish Branch if: steps.check-branch.outputs.match == 'true' run: | NAME=$(npx pkg-jq -r .name) VERSION=$(npx pkg-jq -r .version) if npx version-exists "$NAME" "$VERSION" then echo "$NAME@$VERSION exists on NPM, skipped." else echo "Publishing..." && npm publish fi env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Is Not A Publish Branch if: steps.check-branch.outputs.match != 'true' run: echo 'Not A Publish Branch'