diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..a3ab253 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,118 @@ +name: Tests + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +env: + CI: true + +jobs: + lint: + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + timeout-minutes: 60 + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + cache: 'npm' + cache-dependency-path: 'package-lock.json' + check-latest: true + node-version-file: '.node-version' + + - name: Cache dependencies + id: npm-cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Lint + run: npm run lint + + test: + needs: [lint] + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + timeout-minutes: 60 + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + cache: 'npm' + cache-dependency-path: 'package-lock.json' + check-latest: true + node-version-file: '.node-version' + + - name: Cache dependencies + id: npm-cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Run jest tests + run: npm run test + + build: + needs: [test] + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + cache: 'npm' + cache-dependency-path: 'package-lock.json' + check-latest: true + node-version-file: '.node-version' + + - name: Cache dependencies + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Build + run: npm run build --if-present + + - name: Upload packages + uses: actions/upload-artifact@v3 + with: + name: lib + path: lib + retention-days: 30 diff --git a/.node-version b/.node-version index 2ab3d4b..a9b234d 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v16.20.2 +v20.8.0