diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000..288e096d --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,137 @@ +name: ci +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + + test_node: + runs-on: ${{ matrix.os }} + strategy: + matrix: + node: [ '15', '14', '12' ] + os: [ windows-latest, ubuntu-latest ] + name: Test with Node v${{ matrix.node }} on ${{ matrix.os }} + steps: + - uses: actions/checkout@v3.0.2 + - uses: actions/setup-node@v3.4.1 + with: + node-version: ${{ matrix.node }} + - uses: bahmutov/npm-install@v1.8.22 + - run: | + npm run build + npm test + test_deno: + runs-on: ubuntu-latest + name: test with Deno + steps: + - uses: actions/checkout@v3.0.2 + - uses: actions/setup-node@v3.4.1 + - uses: actions/cache@v1 + with: + path: ~/.cache/deno + key: deno-${{ runner.os }}-${{ hashFiles('deno-lock.json') }} + restore-keys: | + deno-${{ runner.os }}-${{ hashFiles('deno-lock.json') }} + deno-${{ runner.os }}- + deno- + - uses: denolib/setup-deno@v2.3.0 + with: + deno-version: v1.x + - run: deno --version + # We don't actually execute any runtime check but at least we make sure that, typewise, everything's fine. + - uses: bahmutov/npm-install@v1.8.22 + - run: npx denoify + - run: deno run --reload --unstable --no-check deno_dist/mod.ts + + check_if_version_upgraded: + name: Check if version upgrade + # We run this only if it's a push on the default branch or if it's a PR from a + # branch (meaning not a PR from a fork). It would be more straightforward to test if secrets.NPM_TOKEN is + # defined but GitHub Action don't allow it yet. + if: | + github.event_name == 'push' || + github.event.pull_request.head.repo.owner.login == github.event.pull_request.base.repo.owner.login + runs-on: ubuntu-latest + needs: + - test_node + - test_deno + outputs: + from_version: ${{ steps.step1.outputs.from_version }} + to_version: ${{ steps.step1.outputs.to_version }} + is_upgraded_version: ${{ steps.step1.outputs.is_upgraded_version }} + is_release_beta: ${{steps.step1.outputs.is_release_beta }} + steps: + - uses: garronej/ts-ci@v1.1.8 + id: step1 + with: + action_name: is_package_json_version_upgraded + branch: ${{ github.head_ref || github.ref }} + + publish: + runs-on: ubuntu-latest + needs: + - check_if_version_upgraded + # We create a release only if the version have been upgraded and we are on a default branch + # PR on the default branch can release beta but not real release + if: | + needs.check_if_version_upgraded.outputs.is_upgraded_version == 'true' && + ( + github.event_name == 'push' || + needs.check_if_version_upgraded.outputs.is_release_beta == 'true' + ) + steps: + - uses: actions/checkout@v3.0.2 + with: + fetch-depth: 0 + ref: ${{ github.ref }} + - run: rm -r .github + - run: | + git branch -d latest || true + git push origin :latest || true + - run: | + git branch latest + git checkout latest + - uses: actions/setup-node@v3.4.1 + with: + node-version: '15' + registry-url: https://registry.npmjs.org/ + - uses: bahmutov/npm-install@v1.8.22 + - run: npm run build + - run: npx -y -p denoify@1.1.4 enable_short_npm_import_path + env: + DRY_RUN: "0" + - run: | + if [ "$(npm show . version)" = "$VERSION" ]; then + echo "This version is already published" + exit 0 + fi + if [ "$NODE_AUTH_TOKEN" = "" ]; then + echo "Can't publish on NPM, You must first create a secret called NPM_TOKEN that contains your NPM auth token. " + false + fi + npm publish + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + VERSION: ${{ needs.check_if_version_upgraded.outputs.to_version }} + - run: | + git config --global user.name "actions" + git config --global user.email actions@example.com + git add -A + git commit -am "Enabling shorter import paths" + git push origin latest + - uses: softprops/action-gh-release@v1 + with: + name: Release v${{ needs.check_if_version_upgraded.outputs.to_version }} + tag_name: v${{ needs.check_if_version_upgraded.outputs.to_version }} + target_commitish: latest + generate_release_notes: true + draft: false + prerelease: ${{ needs.check_if_version_upgraded.outputs.is_release_beta == 'true' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/README.md b/README.md index 48613786..c8b45551 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,9 @@ with smart type inference.

+ + CI Workflow + downloads