From 36311d7aecc224907bbc4db6505457f791d81168 Mon Sep 17 00:00:00 2001 From: Shunichiro Aki Date: Thu, 16 Jan 2025 20:19:32 +0900 Subject: [PATCH] Initial release --- .github/workflows/release.yml | 107 ++++++++++++++++++++++++++++++++++ .github/workflows/test.yml | 27 +++++++++ Dockerfile | 3 +- README.md | 8 +++ build.js | 1 + images/homeassistant.png | Bin 0 -> 13373 bytes package.json | 2 +- 7 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test.yml create mode 100644 images/homeassistant.png diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..6ab5bda --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,107 @@ +name: Release + +on: + push: + branches: + - main + +jobs: + test: + uses: ./.github/workflows/test.yml + + get-version: + needs: test + runs-on: ubuntu-latest + outputs: + current: ${{ steps.current.outputs.version }} + previous: ${{ steps.previous.outputs.version }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 2 + + - id: current + run: | + VERSION=$(jq -r '.version' package.json) + echo "current: $VERSION" + echo "version=$VERSION" >> $GITHUB_OUTPUT + + - id: previous + run: | + VERSION=$(git show HEAD~1:package.json | jq -r '.version') + echo "previous: $VERSION" + echo "version=$VERSION" >> $GITHUB_OUTPUT + + release: + runs-on: ubuntu-latest + needs: get-version + if: ${{ needs.get-version.outputs.current != needs.get-version.outputs.previous }} + steps: + - uses: actions/checkout@v4 + + - name: Add Tag + run: | + git tag "v${{ needs.get-version.outputs.current }}" + git push origin "v${{ needs.get-version.outputs.current }}" + + - name: Create Release to GitHub + run: gh release create "v${{ needs.get-version.outputs.current }}" --generate-notes + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + build-and-publish: + runs-on: ubuntu-latest + needs: get-version + if: ${{ needs.get-version.outputs.current != needs.get-version.outputs.previous }} + steps: + - name: checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ github.repository }} + tags: | + type=raw,value=latest + type=raw,value=v${{ needs.get-version.outputs.current }} + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - uses: sarisia/actions-status-discord@v1 + if: always() + with: + webhook: ${{ secrets.DISCORD_WEBHOOK }} + + deploy-webhook: + runs-on: ubuntu-latest + needs: build-and-publish + steps: + - env: + WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }} + WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }} + run: | + TIMESTAMP=$(date +%s) + SIGNATURE=$(echo -n "$TIMESTAMP" | openssl dgst -sha256 -hmac "$WEBHOOK_SECRET" | awk '{print $2}') + curl -X POST "$WEBHOOK_URL" \ + -H "X-Signature: $SIGNATURE" \ + -H "X-Timestamp: $TIMESTAMP" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..dd09b35 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,27 @@ +name: Test + +on: + workflow_call: + pull_request: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: "22.x" + + - run: npm ci + + - run: npm run lint + + - run: npm run build + + - run: npm test diff --git a/Dockerfile b/Dockerfile index 71c1468..ab8dce4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,8 @@ FROM node:22-alpine AS runtime WORKDIR /app COPY --chown=node:node --from=build /app/package*.json ./ -COPY --chown=node:node --from=build /app/dist dist +RUN npm ci --omit=dev --ignore-scripts +COPY --from=build /app/dist dist USER node EXPOSE 3000 diff --git a/README.md b/README.md index 3d8e213..b189195 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,11 @@ ECHONET Liteプロトコルを使用して、Wi-SUN対応スマートメーターから取得したデータを解析し、Home AssistantのMQTT Discovery形式で公開するアプリケーションです。 このアプリケーションにより、スマートメーターの情報をHome Assistantに自動登録し、エネルギー使用量のモニタリングや管理を簡単に行えます。 + +## エンティティ一覧 + +![Home Assistant](images/homeassistant.png) + +## サポートデバイス + +- [BP35C2](https://www.furutaka-netsel.co.jp/maker/rohm/bp35c2) diff --git a/build.js b/build.js index 5628128..bc930c9 100644 --- a/build.js +++ b/build.js @@ -17,4 +17,5 @@ await build({ js: 'import { createRequire } from "module"; import url from "url"; const require = createRequire(import.meta.url); const __filename = url.fileURLToPath(import.meta.url); const __dirname = url.fileURLToPath(new URL(".", import.meta.url));', }, loader: { ".node": "file" }, + packages: "external", }); diff --git a/images/homeassistant.png b/images/homeassistant.png new file mode 100644 index 0000000000000000000000000000000000000000..1299c25bbf910ae58e3164bda5f8508717d307ea GIT binary patch literal 13373 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 86138ed..e2d3bdf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wisun2mqtt", - "version": "0.2.0", + "version": "1.0.0", "main": "dist/index.js", "type": "module", "homepage": "https://github.com/nana4rider/wisun2mqtt",