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 -GitHub Actions Workflow Status +GitHub Actions Workflow Status GitHub package.json version GitHub License