diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml
new file mode 100644
index 0000000..6ca260f
--- /dev/null
+++ b/.github/workflows/publish-release.yml
@@ -0,0 +1,147 @@
+name: Publish & Release
+
+on: workflow_dispatch
+
+jobs:
+ build:
+ name: Build
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: yarn
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Install dependencies
+ run: |
+ yarn config set network-timeout 300000
+ yarn install --prefer-offline
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Build
+ continue-on-error: false
+ run: yarn build
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: dist
+ path: dist
+ retention-days: 30
+
+ push:
+ name: Push
+ needs: build
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ env:
+ BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Download artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: dist
+ path: dist
+
+ - name: Push distribution
+ run: |
+ MSG="$(printf "Publish distribution\n[skip ci]")"
+ git config --global user.name "github-actions[bot]"
+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
+ git add dist/index.min.* -f
+ git diff-index --quiet HEAD || git commit -m "$MSG" --no-verify --signoff
+ git push origin $BRANCH_NAME
+
+ deploy:
+ name: Deploy
+ needs: build
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ contents: read
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Download artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: dist
+ path: dist
+
+ - name: Configure AWS credentials
+ uses: aws-actions/configure-aws-credentials@v4
+ with:
+ role-to-assume: ${{ secrets.AWS_GITHUB_ACTION_ROLE }}
+ aws-region: us-east-2
+
+ - name: Sync files to S3 bucket
+ run: |
+ PACKAGE_VERSION=$(npm pkg get version --workspaces=false | tr -d \")
+ aws s3 sync dist s3://cdn.zigurous.com/forge-react@$PACKAGE_VERSION/dist --delete --exclude "*.ts"
+
+ publish:
+ name: Publish
+ needs: [push, deploy]
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Download artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: dist
+ path: dist
+
+ - name: Setup node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: yarn
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Install dependencies
+ run: |
+ yarn config set network-timeout 300000
+ yarn install --prefer-offline
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Publish to NPM
+ run: |
+ npm publish
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ release:
+ name: Release
+ needs: publish
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Create release
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ PACKAGE_VERSION=$(npm pkg get version --workspaces=false | tr -d \")
+ gh release create "$PACKAGE_VERSION" \
+ --target ${{ github.ref_name }} \
+ --title "$PACKAGE_VERSION" \
+ --latest
diff --git a/README.md b/README.md
index a1d9f19..8990d19 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Forge React
-
+