diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000..99c0abfa --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,40 @@ +name: Unit Test Coverage + +on: + push: + branches: + - feature/test-chain-util + pull_request: + branches: + - feature/test-chain-util + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: Install dependencies + run: yarn install + + - name: Run tests with coverage + run: yarn run test:coverage + + - name: Generate coverage badge + uses: jaywcjlove/coverage-badges-cli@main + with: + source: coverage/coverage-summary.json + output: coverage/badges.svg + + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./coverage diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..2355e34f --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,33 @@ +name: Publish +env: + CI: true +on: + push: + branches: + - feature/test-chain-util + tags: + - '!*' +jobs: + release: + name: Setup + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '20' + registry-url: 'https://npm.pkg.github.com' + + - name: Install dependencies + run: yarn install + + - name: Publish to npm + run: | + npm config set //registry.npmjs.org/:_authToken=$NPM_TOKEN + npm publish || (echo "pnpm publish failed" && exit 1) + env: + NPM_TOKEN: ${{secrets.NPM_TOKEN}} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test-badge.yml b/.github/workflows/test-badge.yml new file mode 100644 index 00000000..412c07e3 --- /dev/null +++ b/.github/workflows/test-badge.yml @@ -0,0 +1,108 @@ +name: Test Badge + +permissions: + contents: write + +on: + push: + branches: + - dev + - master + - feature/test-chain-util + +env: + BRANCH_NAME: 'feature/badge-json' + +jobs: + test: + name: Generate Test Badge + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 20 + cache: yarn + - run: yarn install + - run: yarn run test:browser + - name: Install xmlstarlet + run: | + sudo apt-get update + sudo apt-get install -y xmlstarlet + + - name: Extract test counts + run: | + echo "TESTS=$(xmlstarlet sel -t -v "testsuites/@tests" "jest-report.xml")" >> $GITHUB_ENV + echo "FAILURES=$(xmlstarlet sel -t -v "testsuites/@failures" "jest-report.xml")" >> $GITHUB_ENV + echo "ERRORS=$(xmlstarlet sel -t -v "testsuites/@errors" "jest-report.xml")" >> $GITHUB_ENV + + - name: Set file name + run: echo "FILENAME=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')-test-results.json" >> $GITHUB_ENV + + - name: Prepare Content + uses: actions/github-script@v5 + with: + github-token: ${{ secrets.COMMIT_TOKEN }} + script: | + const fs = require('fs'); + const tests = "${{ env.TESTS }}"; + const failures = "${{ env.FAILURES }}"; + const errors = "${{ env.ERRORS }}"; + const success = tests - failures; + const color = errors > 0 ? "red" : (failures > 0 ? "green" : "brightgreen"); + const content = `{"schemaVersion":1,"label":"tests","message":"${tests} tests, ${success} success","color":"${color}"}`; + + fs.writeFileSync("${{ env.FILENAME }}", content); + + - name: Check if file exists + uses: actions/github-script@v5 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + let fileExists = false; + try { + const { data } = await github.rest.repos.getContent({ + owner: context.repo.owner, + repo: context.repo.repo, + path: "${{ env.FILENAME }}", + ref: "${{ env.BRANCH_NAME }}", + }); + fileExists = !!data; + } catch (error) { + if (error.status !== 404) { + throw error; + } + } + core.exportVariable('FILE_EXISTS', fileExists); + + - name: Create or update file + uses: actions/github-script@v5 + with: + github-token: ${{ secrets.COMMIT_TOKEN }} + script: | + const fs = require('fs'); + const path = require('path'); + const filePath = path.join(process.env.GITHUB_WORKSPACE, "${{ env.FILENAME }}"); + const fileContent = fs.readFileSync(filePath, 'utf8'); + + const params = { + owner: context.repo.owner, + repo: context.repo.repo, + path: "${{ env.FILENAME }}", + message: `Update ${{ env.FILENAME }}`, + content: Buffer.from(fileContent).toString('base64'), + branch: "${{ env.BRANCH_NAME }}" + }; + + if (${{ env.FILE_EXISTS }}) { + const { data } = await github.rest.repos.getContent({ + owner: context.repo.owner, + repo: context.repo.repo, + path: "${{ env.FILENAME }}", + ref: "${{ env.BRANCH_NAME }}" + }); + params.sha = data.sha; + } + + await github.rest.repos.createOrUpdateFileContents(params); diff --git a/README.md b/README.md index e1c1a545..8b3cafff 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,23 @@ # aelf-sdk.js - AELF JavaScript API -| Statements | Branches | Functions | Lines | +
+ + | Branch | Tests | Coverage | +|--------------|-----------------|----------------| +| `feature/test-chain-util` |  |  | + + ## 1. Introduction diff --git a/jest-report.xml b/jest-report.xml new file mode 100644 index 00000000..30ef6ffd --- /dev/null +++ b/jest-report.xml @@ -0,0 +1,479 @@ + +