diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 3497ce6d27..56e7b96bce 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -49,16 +49,16 @@ List general components of the application that this PR will affect: ## Screenshot -Replace FIXME_BRANCH_NAME in the URL below with this branch name. +Replace `FIXME_BRANCH_NAME`, `FIXME_PR_NUMBER` in the URL below with this branch name and PR number. ### Desktop Width 1200px -![Desktop Home](https://raw.githubusercontent.com/tubone24/blog/screenshot/docs/screenshot/FIXME_BRANCH_NAME/screenshot-ubuntu-latest-1200.png) +![Desktop Home](https://raw.githubusercontent.com/tubone24/blog/screenshot/docs/screenshot/FIXME_BRANCH_NAME/screenshot-ubuntu-latest-FIXME_PR_NUMBER-FIXME_BRANCH_NAME-1200.png) ### Mobile Width 400px -mobile home +mobile home diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000000..ae58332f12 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,22 @@ +changelog: + exclude: + labels: + - ignore-for-release + authors: + - renovate + - dependabot + categories: + - title: Breaking Changes 🛠 + labels: + - Semver-Major + - breaking-change + - title: Exciting New Features 🎉 + labels: + - Semver-Minor + - enhancement + - title: Update Article 🎉 + labels: + - article + - title: Other Changes + labels: + - "*" diff --git a/.github/workflows/auto-assign-author.yml b/.github/workflows/auto-assign-author.yml new file mode 100644 index 0000000000..1941e11ae4 --- /dev/null +++ b/.github/workflows/auto-assign-author.yml @@ -0,0 +1,16 @@ +name: Auto Assign Author + +on: + pull_request: + types: + - opened + +jobs: + assign: + if: github.actor != 'dependabot[bot]' + + name: Assign author to PR + runs-on: ubuntu-latest + steps: + - name: Assign author to PR + uses: technote-space/assign-author@v1 diff --git a/.github/workflows/common-lint.yml b/.github/workflows/common-lint.yml index 2750ea1b81..e827d10710 100644 --- a/.github/workflows/common-lint.yml +++ b/.github/workflows/common-lint.yml @@ -19,7 +19,7 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache uses: actions/cache@v3 with: @@ -43,3 +43,14 @@ jobs: uses: suzuki-shunsuke/github-action-renovate-config-validator@v0.1.2 with: config_file_path: 'renovate.json' + actionlint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Download actionlint + id: get_actionlint + run: bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash) + shell: bash + - name: Check workflow files + run: ${{ steps.get_actionlint.outputs.executable }} -color -shellcheck "$(which shellcheck) -e SC2002" + shell: bash diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 0462417f11..622ff114eb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -7,6 +7,33 @@ env: cache-version: v2 jobs: + create-cache: + runs-on: ubuntu-latest + steps: + - name: Checkout source code + uses: actions/checkout@v3 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 16.x + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" + - name: Cache + uses: actions/cache@v3 + with: + path: | + ~/.cache + ${{ steps.yarn-cache-dir-path.outputs.dir }} + node_modules + key: ${{ runner.os }}-build-${{ env.cache-version }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-version }}-${{ hashFiles('**/yarn.lock') }} + ${{ runner.os }}-build-${{ env.cache-version }}- + - name: yarn install + env: + NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} + run: yarn install --frozen-lockfile test: runs-on: ubuntu-latest steps: @@ -27,9 +54,9 @@ jobs: sudo apt-get install fonts-noto - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -132,9 +159,9 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -172,6 +199,12 @@ jobs: steps: - name: Checkout source code uses: actions/checkout@v3 + - uses: chrnorm/deployment-action@v2 + name: Create GitHub deployment + id: deployment-prod + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: production - name: Setup Node uses: actions/setup-node@v3 with: @@ -180,9 +213,9 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -233,16 +266,40 @@ jobs: env: NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} + - uses: chrnorm/deployment-status@v2 + if: success() + name: Create GitHub deploy (Success) + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: production + environment-url: "https://blog.tubone-project24.xyz" + deployment-id: ${{ steps.deployment-prod.outputs.deployment_id }} + state: "success" + - uses: chrnorm/deployment-status@v2 + if: failure() + name: Create GitHub deploy (Failure) + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: production + environment-url: "https://blog.tubone-project24.xyz" + deployment-id: ${{ steps.deployment-prod.outputs.deployment_id }} + state: "failure" storybook: runs-on: ubuntu-latest steps: - name: Checkout source code uses: actions/checkout@v3 + - uses: chrnorm/deployment-action@v2 + name: Create GitHub deployment + id: deployment-prod-storybook + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: production-storybook - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -283,6 +340,24 @@ jobs: env: NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_STORYBOOK_AUTH_TOKEN }} NETLIFY_SITE_ID: ${{ secrets.NETLIFY_STORYBOOK_SITE_ID }} + - uses: chrnorm/deployment-status@v2 + if: success() + name: Create GitHub deploy (Success) + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: production-storybook + environment-url: "https://blog-storybook.netlify.app" + deployment-id: ${{ steps.deployment-prod-storybook.outputs.deployment_id }} + state: "success" + - uses: chrnorm/deployment-status@v2 + if: failure() + name: Create GitHub deploy (Failure) + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: production-storybook + environment-url: "https://blog-storybook.netlify.app" + deployment-id: ${{ steps.deployment-prod-storybook.outputs.deployment_id }} + state: "failure" lighthouse: runs-on: macos-latest needs: ['build'] diff --git a/.github/workflows/owaspzap.yml b/.github/workflows/owaspzap.yml index 56dd3226f8..5f69a37835 100644 --- a/.github/workflows/owaspzap.yml +++ b/.github/workflows/owaspzap.yml @@ -22,7 +22,7 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache uses: actions/cache@v3 with: diff --git a/.github/workflows/previewDeploy.yml b/.github/workflows/previewDeploy.yml index 751a0198ce..bc243ce3d1 100644 --- a/.github/workflows/previewDeploy.yml +++ b/.github/workflows/previewDeploy.yml @@ -20,7 +20,34 @@ jobs: - name: Print head git commit message id: get-head-commit-message run: | - echo "headCommitMsg=$(git show -s --format=%s)" >> $GITHUB_OUTPUT + echo "headCommitMsg=$(git show -s --format=%s)" >> "${GITHUB_OUTPUT}" + create-cache: + runs-on: ubuntu-latest + steps: + - name: Checkout source code + uses: actions/checkout@v3 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 16.x + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" + - name: Cache + uses: actions/cache@v3 + with: + path: | + ~/.cache + ${{ steps.yarn-cache-dir-path.outputs.dir }} + node_modules + key: ${{ runner.os }}-build-${{ env.cache-version }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-version }}-${{ hashFiles('**/yarn.lock') }} + ${{ runner.os }}-build-${{ env.cache-version }}- + - name: yarn install + env: + NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} + run: yarn install --frozen-lockfile test: runs-on: ubuntu-latest steps: @@ -41,9 +68,9 @@ jobs: sudo apt-get install fonts-noto - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -111,11 +138,11 @@ jobs: path: ./cypress/videos/e2e/main.spec.ts.mp4 - name: Get PR Number id: get-pr-num - run: echo "prnum=$(echo $GITHUB_REF | sed -e 's/[^0-9]//g')" >> $GITHUB_OUTPUT + run: echo "prnum=$(echo "${GITHUB_REF}" | sed -e 's/[^0-9]//g')" >> "${GITHUB_OUTPUT}" - name: Add file env: FILE_PATH: ./cypress/videos/e2e/main.spec.ts.mp4 - FILE_NAME: video-${{ matrix.os }}-${{ steps.get-pr-num.outputs.prnum }}-${{ github.head_ref }}-${{ matrix.width }}-main.spec.ts.mp4 + FILE_NAME: video-${{ steps.get-pr-num.outputs.prnum }}-${{ github.head_ref }}-main.spec.ts.mp4 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HEAD_REF: ${{ github.head_ref }} GITHUB_REPOSITORY: "tubone24/blog" @@ -135,9 +162,9 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -173,6 +200,12 @@ jobs: steps: - name: Checkout source code uses: actions/checkout@v3 + - uses: chrnorm/deployment-action@v2 + name: Create GitHub deployment + id: deployment-dev + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: development - name: Setup Node uses: actions/setup-node@v3 with: @@ -181,9 +214,9 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -240,12 +273,30 @@ jobs: curl -X POST \ -H "Authorization: token ${GITHUB_TOKEN}" \ -d "{\"body\": \"$(cat cli.txt)\"}" \ - ${URL} + "${URL}" - name: get Netlify Draft URL if: ${{ !contains(needs.check-skip-flags.outputs.head-commit-message, '[skip netlify]') }} id: get-netlify-draft-url run: | - echo "draftUrl=$(cat cli.txt | sed -r 's/.*Website Draft URL: (.*)\\n\\nIf everything.*/\1/')" >> $GITHUB_OUTPUT + echo "draftUrl=$(cat cli.txt | sed -r 's/.*Website Draft URL: (.*)\\n\\nIf everything.*/\1/')" >> "${GITHUB_OUTPUT}" + - uses: chrnorm/deployment-status@v2 + if: ${{ !contains(needs.check-skip-flags.outputs.head-commit-message, '[skip netlify]') && success() }} + name: Create GitHub deploy (Success) + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: development + environment-url: ${{ steps.get-netlify-draft-url.outputs.draftUrl }} + deployment-id: ${{ steps.deployment-dev.outputs.deployment_id }} + state: "success" + - uses: chrnorm/deployment-status@v2 + if: ${{ !contains(needs.check-skip-flags.outputs.head-commit-message, '[skip netlify]') && failure() }} + name: Create GitHub deploy (Failure) + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: development + environment-url: ${{ steps.get-netlify-draft-url.outputs.draftUrl }} + deployment-id: ${{ steps.deployment-dev.outputs.deployment_id }} + state: "failure" outputs: draftUrl: ${{ steps.get-netlify-draft-url.outputs.draftUrl }} @@ -265,9 +316,9 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -330,9 +381,9 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -377,7 +428,7 @@ jobs: curl -X POST \ -H "Authorization: token ${GITHUB_TOKEN}" \ -d "{\"body\": \"$(cat test/memlab/data/out/leaks.txt)\"}" \ - ${URL} + "${URL}" textlint: name: textlint runs-on: ubuntu-latest @@ -390,9 +441,9 @@ jobs: - uses: actions/checkout@v3 - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -420,11 +471,17 @@ jobs: steps: - name: Checkout source code uses: actions/checkout@v3 + - uses: chrnorm/deployment-action@v2 + name: Create GitHub deployment + id: deployment-dev-storybook + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: development-storybook - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -483,7 +540,30 @@ jobs: curl -X POST \ -H "Authorization: token ${GITHUB_TOKEN}" \ -d "{\"body\": \"$(cat cli.txt)\"}" \ - ${URL} + "${URL}" + - name: get Netlify Draft URL + if: ${{ !contains(needs.check-skip-flags.outputs.head-commit-message, '[skip netlify]') }} + id: get-netlify-draft-url + run: | + echo "draftUrl=$(cat cli.txt | sed -r 's/.*Website Draft URL: (.*)\\n\\nIf everything.*/\1/')" >> "${GITHUB_OUTPUT}" + - uses: chrnorm/deployment-status@v2 + if: ${{ !contains(needs.check-skip-flags.outputs.head-commit-message, '[skip netlify]') && success() }} + name: Create GitHub deploy (Success) + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: development-storybook + environment-url: ${{ steps.get-netlify-draft-url.outputs.draftUrl }} + deployment-id: ${{ steps.deployment-dev-storybook.outputs.deployment_id }} + state: "success" + - uses: chrnorm/deployment-status@v2 + if: ${{ !contains(needs.check-skip-flags.outputs.head-commit-message, '[skip netlify]') && failure() }} + name: Create GitHub deploy (Failure) + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: development-storybook + environment-url: ${{ steps.get-netlify-draft-url.outputs.draftUrl }} + deployment-id: ${{ steps.deployment-dev-storybook.outputs.deployment_id }} + state: "failure" bundle-analyzer-link: @@ -535,12 +615,14 @@ jobs: width: ${{ matrix.width }} delay: 10 - uses: actions/download-artifact@v3 + if: ${{ !contains(needs.check-skip-flags.outputs.head-commit-message, '[skip netlify]') }} with: name: screenshot-${{ matrix.os }}-${{ matrix.width }} - name: Get PR Number id: get-pr-num - run: echo "prnum=$(echo $GITHUB_REF | sed -e 's/[^0-9]//g')" >> $GITHUB_OUTPUT + run: echo "prnum=$(echo $GITHUB_REF | sed -e 's/[^0-9]//g')" >> "${GITHUB_OUTPUT}" - name: PR Comments + if: ${{ !contains(needs.check-skip-flags.outputs.head-commit-message, '[skip netlify]') }} env: FILE_PATH: screenshot-${{ matrix.os }}-${{ matrix.width }}.png FILE_NAME: screenshot-${{ matrix.os }}-${{ steps.get-pr-num.outputs.prnum }}-${{ github.head_ref }}-${{ matrix.width }}.png diff --git a/.github/workflows/snyk.yml b/.github/workflows/snyk.yml index 1ccd0a2c18..bb8c6681b5 100644 --- a/.github/workflows/snyk.yml +++ b/.github/workflows/snyk.yml @@ -27,9 +27,9 @@ jobs: scope: '@tubone24' - name: Get yarn cache directory path id: yarn-cache-dir-path - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "dir=$(yarn cache dir)" >> "${GITHUB_OUTPUT}" - name: Cache - uses: actions/cache@v3 + uses: actions/cache/restore@v3 with: path: | ~/.cache @@ -128,4 +128,4 @@ jobs: curl -X POST \ -H "Authorization: token ${GITHUB_TOKEN}" \ -d "{\"body\": \"$(cat summarize.txt)\"}" \ - ${URL} + "${URL}" diff --git a/.github/workflows/tfsec.yml b/.github/workflows/tfsec.yml index 9226feeebc..b995ed181e 100644 --- a/.github/workflows/tfsec.yml +++ b/.github/workflows/tfsec.yml @@ -7,9 +7,11 @@ name: tfsec on: push: - branches: [ "master" ] + branches: + - master pull_request: - branches: [ "master" ] + branches: + - master schedule: - cron: '32 6 * * 6' diff --git a/.shellcheckrc b/.shellcheckrc new file mode 100644 index 0000000000..0e634d6df7 --- /dev/null +++ b/.shellcheckrc @@ -0,0 +1 @@ +disable=SC2002 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..855f67d8ed --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +# CHANGELOG + +See [GitHub Releases](https://github.com/tubone24/blog/releases). diff --git a/README.md b/README.md index e5510899a3..5b7bb9b9cd 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ > Super powerfully all-packaged blog system [![Twitter URL](https://img.shields.io/twitter/url/https/blog.tubone-project24.xyz?style=social)](https://twitter.com/intent/tweet?text=LikeThis:&url=https%3A%2F%2Fblog.tubone-project24.xyz) +[![Release Version](https://release-badges-generator.vercel.app/api/releases.svg?user=tubone24&repo=blog&gradient=00ffff,8bd1fa)](https://github.com/tubone24/blog/releases/latest) [![Netlify Status](https://api.netlify.com/api/v1/badges/3751ef40-b145-4249-9657-39d3fb04ae81/deploy-status)](https://app.netlify.com/sites/pensive-lamport-5822d2/deploys) [![DeployToNetlifyPRD](https://github.com/tubone24/blog/workflows/DeployToNetlifyPRD/badge.svg)](https://github.com/tubone24/blog/actions?query=workflow%3ADeployToNetlifyPRD) [![Coverage Status](https://coveralls.io/repos/github/tubone24/blog/badge.svg?branch=master)](https://coveralls.io/github/tubone24/blog?branch=master) @@ -13,6 +14,7 @@ ![blog Actions](https://api.meercode.io/badge/tubone24/blog?type=ci-score&lastDay=184) [![websiteup](https://img.shields.io/website.svg?down_color=red&down_message=down&up_color=green&up_message=up&url=https%3A%2F%2Fblog.tubone-project24.xyz)](https://blog.tubone-project24.xyz) [![Buy me a coffee](https://camo.githubusercontent.com/3c1dd7a8a20dafe2a0b9b3b14ddaec4b63f73060625d1456761e9fd2e71f82bc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f42794d6541436f666665652d7475626f6e6532342d627269676874677265656e3f6c6f676f3d4275792532304d6525323041253230436f66666565)](https://www.buymeacoffee.com/tubone24) +[![PRs welcome!](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/tubone24/blog/blob/master/CONTRIBUTING.md) ## What is this? @@ -22,7 +24,7 @@ This is tubone's Blog by Gatsby and Netlify. ## Preview -Screenshots from the last deployment on the master branch. +[Screenshots](https://github.com/tubone24/blog/tree/screenshot) from the last deployment on the master branch. ### Desktop @@ -46,7 +48,7 @@ Special, thanks! ### Structure -- Gatsby.js v4, Static site generating +- [Gatsby.js v4](https://www.gatsbyjs.com/gatsby-4/), Static site generating - Use [Preact](https://preactjs.com/), faster than [React](https://ja.reactjs.org/) - All Components writen by [TypeScript](https://www.typescriptlang.org/) - Use [Bootstrap5](https://getbootstrap.jp/) for CSS Framework @@ -85,6 +87,7 @@ Special, thanks! - Detect browser's memory leaks by [memlab](https://github.com/facebookincubator/memlab) - Detect vulnerability by [Snyk](https://app.snyk.io/) - Detect vulnerability by [OWASP ZAP](https://www.zaproxy.org/) +- Capture [some width screenshots](https://github.com/tubone24/blog/tree/screenshot) every PR and push master. ### For contributor of articles @@ -359,6 +362,16 @@ Last 14 days, CI Score by [meercode.io](https://meercode.io) ![blog Actions](https://api.meercode.io/badge/tubone24/blog?type=ci-success-rate&lastDay=14) +## Change log and versioning + +This Blog's CHANGELOG integrated [GitHub Releases](https://github.com/tubone24/blog/releases) + +And this blog's versioning policy is [semver](https://semver.org/) like `1.0.1` + +- MAJOR version when you make incompatible API changes +- MINOR version when you add functionality in a backwards compatible manner or **create articles**. +- PATCH version when you make backwards compatible bug fixes or **update (include delete) articles**. + ## License - The source code under the MIT LICENSE.