diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..bfe6e4445 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,35 @@ +## Link to Jira Ticket + +https://formio.atlassian.net/browse/FIO-XXXX + +## Description + +**What changed?** + +*Use this section to provide a summary description of the changes you've made* + +**Why have you chosen this solution?** + +*Use this section to justify your choices* + +## Breaking Changes / Backwards Compatibility + +*Use this section to describe any potentially breaking changes this PR introduces or any effects this PR might have on backwards compatibility* + +## Dependencies + +*Use this section to list any dependent changes/PRs in other Form.io modules* + +## How has this PR been tested? + +*Use this section to describe how you tested your changes; if you haven't included automated tests, justify your reasoning* + +## Checklist: + +- [ ] I have completed the above PR template +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation (if applicable) +- [ ] My changes generate no new warnings +- [ ] My changes include tests that prove my fix is effective (or that my feature works as intended) +- [ ] New and existing unit/integration tests pass locally with my changes +- [ ] Any dependent changes have corresponding PRs that are listed above \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..71abcbab9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,125 @@ +name: Build, Publish + +on: + pull_request: + types: [opened, synchronize] + +env: + NODE_VERSION: 20.x + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Check out repository code ${{ github.repository }} on ${{ github.ref }} + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Configure Git user + run: | + git config --global user.email "pkgbot@form.io" + git config --global user.name "pkgbot" + + - name: Merge target branch into current branch + run: | + git fetch origin ${{ github.event.pull_request.base.ref }}:${{ github.event.pull_request.base.ref }} + git merge ${{ github.event.pull_request.base.ref }} --no-commit --no-ff + + - name: Check for merge conflicts + run: | + if ! git merge --no-commit --no-ff ${{ github.event.pull_request.base.ref }}; then + echo "Merge conflicts detected." + git merge --abort + exit 1 + else + echo "Merge successful." + fi + + - name: Set up Node.js ${{ env.NODE_VERSION }} + uses: actions/setup-node@v3 + with: + node-version: ${{ env.NODE_VERSION }} + cache: "npm" + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Cache node modules + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Build + uses: borales/actions-yarn@v4 + with: + cmd: build + + - name: Upload build artifact + uses: actions/upload-artifact@v3 + with: + name: build-artifact + path: | + dist/ + lib/ + LICENSE.txt + README.md + package.json + + publish: + needs: build + if: github.event.pull_request.base.ref == 'master' + runs-on: ubuntu-latest + steps: + - name: Download build artifact + uses: actions/download-artifact@v3 + with: + name: build-artifact + path: ./ + + - name: View downloaded build output + run: ls -a + + - name: Restore node modules from cache + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Add npm token to .npmrc + run: | + echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc + + - name: Prepare version for publish + id: prep + run: | + # Extract the pull request number and the short SHA of the commit + PR_NUMBER=$(echo ${{ github.event.number }}) + COMMIT_SHORT_SHA=$(echo "${{ github.event.pull_request.head.sha }}" | cut -c1-7) + + # Extract the current version from package.json + CURRENT_VERSION=$(node -p "require('./package.json').version") + + # If the current version includes '-rc.', remove it and everything after + # This step ensures that we start with a base version like '3.0.0' even if it was a release candidate + BASE_VERSION=$(echo "$CURRENT_VERSION" | cut -d'-' -f1) + + # Construct the new version string + NEW_VERSION="${BASE_VERSION}-dev.${PR_NUMBER}.${COMMIT_SHORT_SHA}" + + # Output the new version for use in subsequent GitHub Actions steps + echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV + + - name: Echo version to publish + run: | + echo "Version to publish: $NEW_VERSION" + + - name: Publish to npm + run: | + npm version $NEW_VERSION + yarn publish --tag dev \ No newline at end of file