From b26f267a3d65b50ebb33fea403a3a0f3b34e9079 Mon Sep 17 00:00:00 2001
From: garronej
Date: Thu, 15 Sep 2022 16:28:57 +0200
Subject: [PATCH] Setup GH Actions Workflow
---
.github/workflows/ci.yaml | 137 ++++++++++++++++++++++++++++++++++++++
README.md | 3 +
2 files changed, 140 insertions(+)
create mode 100644 .github/workflows/ci.yaml
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.
+
+
+