diff --git a/.github/workflows/main.yml b/.github/workflows/test-and-release.yml similarity index 96% rename from .github/workflows/main.yml rename to .github/workflows/test-and-release.yml index 3535a97..960bf16 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/test-and-release.yml @@ -1,134 +1,134 @@ -name: Test and Release - -# Run this job on all pushes and pull requests -# as well as tags with a semantic version -on: - workflow_dispatch: - push: - branches: - - "master" - tags: - # normal versions - - "v[0-9]+.[0-9]+.[0-9]+" - # pre-releases - - "v[0-9]+.[0-9]+.[0-9]+-**" - pull_request: {} - -jobs: - # Performs quick checks before the expensive test runs - check-and-lint: - if: contains(github.event.head_commit.message, '[skip ci]') == false - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [18.x] - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Install Dependencies - run: npm ci - - - name: Lint source code - run: npm run lint - - name: Test package files - run: npm run test:package - - # Runs adapter tests on all supported node versions and OSes - adapter-tests: - if: contains(github.event.head_commit.message, '[skip ci]') == false - - needs: [check-and-lint] - - runs-on: ${{ matrix.os }} - strategy: - matrix: - node-version: [18.x, 20.x] - os: [ubuntu-latest, macos-latest, windows-latest] - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Install Dependencies - run: npm ci - - - name: Run unit tests - run: npm run test:unit - - - name: Run integration tests (unix only) - if: startsWith(runner.OS, 'windows') == false - run: DEBUG=testing:* npm run test:integration - - - name: Run integration tests (windows only) - if: startsWith(runner.OS, 'windows') - run: set DEBUG=testing:* & npm run test:integration - - # Deploys the final package to NPM - deploy: - needs: [adapter-tests] - - # Trigger this step only when a commit on any branch is tagged with a version number - if: | - contains(github.event.head_commit.message, '[skip ci]') == false && - github.event_name == 'push' && - startsWith(github.ref, 'refs/tags/v') - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x] - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Extract the version and commit body from the tag - id: extract_release - # The body may be multiline, therefore newlines and % need to be escaped - run: | - VERSION="${{ github.ref }}" - VERSION=${VERSION##*/v} - # VERSION=0.0.6 - echo "::set-output name=VERSION::$VERSION" - BODY=$(git show -s --format=%b) - BODY="${BODY//'%'/'%25'}" - BODY="${BODY//$'\n'/'%0A'}" - BODY="${BODY//$'\r'/'%0D'}" - echo "::set-output name=BODY::$BODY" - - - name: Publish package to npm - run: | - npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} - npm whoami - npm publish - - - name: Notify Sentry.io about the release - run: | - export NPM_CONFIG_UNSAFE_PERM=true - # npm config set unsafe-perm true - npm i -g @sentry/cli - export SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} - export SENTRY_ORG=private-person-ua - export SENTRY_PROJECT=iobroker-gree-hvac - export SENTRY_VERSION=iobroker-gree-hvac@${{ steps.extract_release.outputs.VERSION }} - # export SENTRY_LOG_LEVEL=debug - sentry-cli releases new $SENTRY_VERSION - sentry-cli releases finalize $SENTRY_VERSION +name: Test and Release + +# Run this job on all pushes and pull requests +# as well as tags with a semantic version +on: + workflow_dispatch: + push: + branches: + - "master" + tags: + # normal versions + - "v[0-9]+.[0-9]+.[0-9]+" + # pre-releases + - "v[0-9]+.[0-9]+.[0-9]+-**" + pull_request: {} + +jobs: + # Performs quick checks before the expensive test runs + check-and-lint: + if: contains(github.event.head_commit.message, '[skip ci]') == false + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install Dependencies + run: npm ci + + - name: Lint source code + run: npm run lint + - name: Test package files + run: npm run test:package + + # Runs adapter tests on all supported node versions and OSes + adapter-tests: + if: contains(github.event.head_commit.message, '[skip ci]') == false + + needs: [check-and-lint] + + runs-on: ${{ matrix.os }} + strategy: + matrix: + node-version: [18.x, 20.x] + os: [ubuntu-latest, macos-latest, windows-latest] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install Dependencies + run: npm ci + + - name: Run unit tests + run: npm run test:unit + + - name: Run integration tests (unix only) + if: startsWith(runner.OS, 'windows') == false + run: DEBUG=testing:* npm run test:integration + + - name: Run integration tests (windows only) + if: startsWith(runner.OS, 'windows') + run: set DEBUG=testing:* & npm run test:integration + + # Deploys the final package to NPM + deploy: + needs: [adapter-tests] + + # Trigger this step only when a commit on any branch is tagged with a version number + if: | + contains(github.event.head_commit.message, '[skip ci]') == false && + github.event_name == 'push' && + startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Extract the version and commit body from the tag + id: extract_release + # The body may be multiline, therefore newlines and % need to be escaped + run: | + VERSION="${{ github.ref }}" + VERSION=${VERSION##*/v} + # VERSION=0.0.6 + echo "::set-output name=VERSION::$VERSION" + BODY=$(git show -s --format=%b) + BODY="${BODY//'%'/'%25'}" + BODY="${BODY//$'\n'/'%0A'}" + BODY="${BODY//$'\r'/'%0D'}" + echo "::set-output name=BODY::$BODY" + + - name: Publish package to npm + run: | + npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} + npm whoami + npm publish + + - name: Notify Sentry.io about the release + run: | + export NPM_CONFIG_UNSAFE_PERM=true + # npm config set unsafe-perm true + npm i -g @sentry/cli + export SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} + export SENTRY_ORG=private-person-ua + export SENTRY_PROJECT=iobroker-gree-hvac + export SENTRY_VERSION=iobroker-gree-hvac@${{ steps.extract_release.outputs.VERSION }} + # export SENTRY_LOG_LEVEL=debug + sentry-cli releases new $SENTRY_VERSION + sentry-cli releases finalize $SENTRY_VERSION