npm.yml 2.7 KB
Newer Older
1 2 3 4 5 6
name: NPM

on: [push, pull_request]

jobs:
  build:
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
7
    name: Build
8
    runs-on: ubuntu-latest
9
    steps:
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
10
      - uses: actions/checkout@v2
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
11 12 13
      - uses: actions/cache@v2
        with:
          path: ~/.npm
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
14
          key: ${{ runner.os }}-wechaty-${{ hashFiles('**/package.json') }}
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
15 16
          restore-keys: |
            ${{ runner.os }}-wechaty-
17

18
      - name: Use Node.js 16
19 20
        uses: actions/setup-node@v2
        with:
21
          node-version: [12, 14, 16]
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
22
      - name: Install Dependencies
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
23 24 25 26
        run: |
          node --version
          npm --version
          npm install
27

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
28 29
      - name: Test
        run: npm test
30 31

  pack:
Huan (李卓桓)'s avatar
clean  
Huan (李卓桓) 已提交
32
    name: Pack
33 34 35
    needs: build
    runs-on: ubuntu-latest
    steps:
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
36
      - uses: actions/checkout@v2
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
37 38 39
      - uses: actions/cache@v2
        with:
          path: ~/.npm
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
40
          key: ${{ runner.os }}-wechaty-${{ hashFiles('**/package.json') }}
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
41 42
          restore-keys: |
            ${{ runner.os }}-wechaty-
43 44 45

      - uses: actions/setup-node@v2
        with:
46
          node-version: 16
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
47 48 49
      - run: npm install
      - run: ./scripts/generate-version.sh
      - run: ./scripts/npm-pack-testing.sh
50 51
        env:
          WECHATY_PUPPET_PADPLUS_TOKEN: ${{ secrets.WECHATY_PUPPET_PADPLUS_TOKEN }}
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
52

Huan (李卓桓)'s avatar
rename  
Huan (李卓桓) 已提交
53
  publish:
54
    if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/v'))
Huan (李卓桓)'s avatar
rename  
Huan (李卓桓) 已提交
55
    name: Publish
56 57 58 59
    needs: [build, pack]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
60 61 62
      - uses: actions/cache@v2
        with:
          path: ~/.npm
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
63
          key: ${{ runner.os }}-wechaty-${{ hashFiles('**/package.json') }}
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
64 65
          restore-keys: |
            ${{ runner.os }}-wechaty-
66 67 68

      - uses: actions/setup-node@v2
        with:
69
          node-version: 16
70
          registry-url: https://registry.npmjs.org/
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
71
      - run: npm install
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
72 73 74
      - run: ./scripts/generate-version.sh
      - run: ./scripts/package-publish-config-tag.sh
      - run: npm run dist
75 76 77 78 79 80 81 82 83

      - 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'
84
        run: |
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
85
          NAME=$(npx pkg-jq -r .name)
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
86
          VERSION=$(npx pkg-jq -r .version)
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
87
          if npx version-exists "$NAME" "$VERSION"
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
88
          then echo "$NAME@$VERSION exists on NPM, skipped."
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
89
          else echo "Publishing..." && npm publish
90
          fi
91
        env:
92
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
93 94 95
      - name: Is Not A Publish Branch
        if: steps.check-branch.outputs.match != 'true'
        run: echo 'Not A Publish Branch'