Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

allow to release via PR #45

Merged
merged 3 commits into from
Jul 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/workflows/auto-approve.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Auto approve

on:
pull_request:
types: [labeled]

jobs:
auto-approve:
if: |
github.actor == 'foxriver76' &&
github.event.label.name == 'automated pr 🔧'
runs-on: ubuntu-latest
steps:
- uses: hmarr/auto-approve-action@v4
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
89 changes: 89 additions & 0 deletions .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Official release

on:
workflow_dispatch: # Manually on demand
inputs:
versionBump:
description: 'Type of version bump'
required: true
default: 'patch'
type: choice
options:
- patch
- minor
- major

jobs:
publish-config:
runs-on: ubuntu-20.04

strategy:
matrix:
node: [20.x] # This should be LTS

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch the history, or this action won't work

- name: Use Node.js ${{ matrix.node }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}

- name: Install dependencies
run: npm ci

- name: Test
run: npm test

- name: Prepare release
env:
VERSION_BUMP: ${{ inputs.versionBump }}
run: |
git config --global user.email "[email protected]"
git config --global user.name "Github Action"
npm run release -- ${VERSION_BUMP}
- name: Determine the version bump
id: version
uses: actions/github-script@v7
with:
result-encoding: string
script: |
const package = require('./package.json');
return package.version
- name: Extract the commit body
id: extract_release
# The body may be multiline, therefore we need to escape some characters
run: |
VERSION="${{ github.ref }}"
VERSION=${VERSION##*/v}
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: Create Pull Request
id: cpr
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.PR_TOKEN }}
commit-message: "[OFFICIAL RELEASE] ${{ steps.version.outputs.result }}"
committer: foxriver76 <[email protected]>
author: foxriver76 <[email protected]>
signoff: false
branch: official-release
delete-branch: true
title: "[OFFICIAL RELEASE] ${{ steps.version.outputs.result }}"
body: |
${{ steps.extract_release.outputs.BODY }}
labels: |
automated pr 🔧
assignees: foxriver76
draft: false
123 changes: 59 additions & 64 deletions .github/workflows/test-and-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ jobs:

steps:
- uses: actions/checkout@v3
- name: Use Node.js 16.x
- name: Use Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 16.x
node-version: 20.x


- name: Install Dependencies
run: npm install
run: npm ci

- name: Build
run: npm run build:ts
Expand All @@ -55,7 +55,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
node-version: [16.x, 18.x, 20.x]
node-version: [18.x, 20.x, 22.x]
os: [ubuntu-latest]

steps:
Expand All @@ -66,104 +66,99 @@ jobs:
node-version: ${{ matrix.node-version }}

- name: Install Dependencies
run: npm install
run: npm ci

- name: Build
run: npm run build:ts

- name: Run local tests
# npm downgrade to 6 (mainly for node.js 16) is needed because else testing fails
# after installing additional adapters
run: |
npm install -g npm@6
npm test
# - name: Run unit tests
# run: npm run test:unit
# - name: Run integration tests # (linux/osx)
# if: startsWith(runner.OS, 'windows') == false
# run: DEBUG=testing:* npm run test:integration
# - name: Run integration tests # (windows)
# if: startsWith(runner.OS, 'windows')
# run: set DEBUG=testing:* & npm run test:integration
run: npm test

# Deploys the final package to NPM
deploy:
auto-merge:
needs: [adapter-tests]

# Trigger this step only when a commit on master 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/')
always() &&
github.event_name == 'pull_request'
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v3
- id: automerge
name: automerge
uses: "pascalgn/[email protected]"
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
MERGE_LABELS: "automated pr 🔧"
MERGE_FILTER_AUTHOR: "foxriver76"
MERGE_FORKS: "false"
MERGE_DELETE_BRANCH: "false"
UPDATE_LABELS: "automated pr 🔧"
MERGE_METHOD: "squash"
MERGE_COMMIT_MESSAGE: "pull-request-title-and-description"

- name: Checkout repository
if: steps.automerge.outputs.mergeResult == 'merged'
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch the history, or this action won't work
ref: 'master'

- name: Use Node.js 16.x
uses: actions/setup-node@v3
- name: Use Node.js 18
if: steps.automerge.outputs.mergeResult == 'merged'
uses: actions/setup-node@v4
with:
node-version: 16.x
node-version: 18

- name: Extract the version and commit body from the tag
- name: Determine version
if: steps.automerge.outputs.mergeResult == 'merged'
id: version
uses: actions/github-script@v7
with:
result-encoding: string
script: |
return require('./package.json').version;
- name: Install dependencies
if: steps.automerge.outputs.mergeResult == 'merged'
run: npm ci

- name: Build
if: steps.automerge.outputs.mergeResult == 'merged'
run: npm run build

- name: Extract the commit body
if: steps.automerge.outputs.mergeResult == 'merged'
id: extract_release
# The body may be multiline, therefore we need to escape some characters
run: |
VERSION="${{ github.ref }}"
VERSION=${VERSION##*/}
VERSION=${VERSION##*v}
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: Install Dependencies
run: npm install

- name: Build
run: npm run build

# - name: Create a clean build
# run: npm run build
- name: Publish legacy package to npm
if: steps.automerge.outputs.mergeResult == 'merged'
run: |
npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}
npm whoami
npm publish
- name: Publish types package to npm
if: steps.automerge.outputs.mergeResult == 'merged'
working-directory: build
run: |
npm publish
- name: Create Github Release
uses: actions/create-release@v1
if: steps.automerge.outputs.mergeResult == 'merged'
uses: ncipollo/release-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release v${{ steps.extract_release.outputs.VERSION }}
tag: v${{ steps.version.outputs.result }}
name: Release v${{ steps.version.outputs.result }}
draft: false
# Prerelease versions create pre-releases on GitHub
prerelease: ${{ contains(steps.extract_release.outputs.VERSION, '-') }}
body: ${{ steps.extract_release.outputs.BODY }}

# - name: Notify Sentry.io about the release
# run: |
# npm i -g @sentry/cli
# export SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}
# export SENTRY_URL=https://sentry.iobroker.net
# export SENTRY_ORG=iobroker
# export SENTRY_PROJECT=iobroker-devices
# export SENTRY_VERSION=iobroker.devices@${{ env.VERSION }}
# sentry-cli releases new $SENTRY_VERSION
# sentry-cli releases finalize $SENTRY_VERSION

# Add the following line BEFORE finalize if repositories are connected in Sentry
# sentry-cli releases set-commits $SENTRY_VERSION --auto

# Add the following line BEFORE finalize if sourcemap uploads are needed
# sentry-cli releases files $SENTRY_VERSION upload-sourcemaps build/
prerelease: ${{ contains(steps.version.outputs.result, '-') }}
body: ${{ steps.extract_release.outputs.BODY }}
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/config.json
/node_modules
/package-lock.json
/.idea
build/
Loading
Loading