diff --git a/.github/renovate.json5 b/.github/renovate.json5 new file mode 100644 index 0000000..e1c540e --- /dev/null +++ b/.github/renovate.json5 @@ -0,0 +1,7 @@ +// Docs: +// https://docs.renovatebot.com/configuration-options/ +{ + "extends": [ + "github>NullVoxPopuli/renovate:npm.json5" + ] +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f01c3a..6d23f22 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,75 +12,22 @@ concurrency: cancel-in-progress: true jobs: - test: - name: "Tests" - runs-on: ubuntu-latest - timeout-minutes: 10 - - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 - with: - version: 8 - - uses: actions/setup-node@v4 - with: - node-version: 18 - cache: pnpm - - name: Install Dependencies - run: pnpm install --frozen-lockfile - - name: Lint - run: pnpm lint - - name: Run Tests - run: pnpm test - - floating: - name: "Floating Dependencies" + lint: + name: "Lint" runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 - with: - version: 8 - - uses: actions/setup-node@v4 - with: - node-version: 18 - cache: pnpm - - name: Install Dependencies - run: pnpm install --no-lockfile - - name: Run Tests - run: pnpm test + - uses: wyvox/action@v1 + - run: pnpm build + - run: pnpm lint - try-scenarios: - name: ${{ matrix.try-scenario }} + tests: + name: "Tests" runs-on: ubuntu-latest - needs: 'test' timeout-minutes: 10 - strategy: - fail-fast: false - matrix: - try-scenario: - - ember-lts-4.12 - - ember-lts-5.4 - - ember-release - - ember-beta - - ember-canary - - embroider-safe - - embroider-optimized - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 - with: - version: 8 - - uses: actions/setup-node@v4 - with: - node-version: 18 - cache: pnpm - - name: Install Dependencies - run: pnpm install --frozen-lockfile - - name: Run Tests - run: ./node_modules/.bin/ember try:one ${{ matrix.try-scenario }} --skip-cleanup - working-directory: test-app + - uses: wyvox/action@v1 + - run: pnpm build + - run: pnpm test diff --git a/.github/workflows/plan-release.yml b/.github/workflows/plan-release.yml new file mode 100644 index 0000000..1ff8e24 --- /dev/null +++ b/.github/workflows/plan-release.yml @@ -0,0 +1,89 @@ +name: Release Plan Review +on: + push: + branches: + - main + - master + pull_request: + types: + - labeled + +concurrency: + group: plan-release # only the latest one of these should ever be running + cancel-in-progress: true + +jobs: + check-plan: + name: "Check Release Plan" + runs-on: ubuntu-latest + outputs: + command: ${{ steps.check-release.outputs.command }} + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: 'main' + # This will only cause the `check-plan` job to have a "command" of `release` + # when the .release-plan.json file was changed on the last commit. + - id: check-release + run: if git diff --name-only HEAD HEAD~1 | grep -w -q ".release-plan.json"; then echo "command=release"; fi >> $GITHUB_OUTPUT + + prepare_release_notes: + name: Prepare Release Notes + runs-on: ubuntu-latest + timeout-minutes: 5 + needs: check-plan + permissions: + contents: write + pull-requests: write + outputs: + explanation: ${{ steps.explanation.outputs.text }} + # only run on push event if plan wasn't updated (don't create a release plan when we're releasing) + # only run on labeled event if the PR has already been merged + if: (github.event_name == 'push' && needs.check-plan.outputs.command != 'release') || (github.event_name == 'pull_request' && github.event.pull_request.merged == true) + + steps: + - uses: actions/checkout@v4 + # We need to download lots of history so that + # github-changelog can discover what's changed since the last release + with: + fetch-depth: 0 + ref: 'main' + + - uses: wyvox/action-setup-pnpm@v3 + - run: pnpm install --frozen-lockfile + + - name: "Generate Explanation and Prep Changelogs" + id: explanation + run: | + set +e + + pnpm release-plan prepare 2> >(tee -a release-plan-stderr.txt >&2) + + + if [ $? -ne 0 ]; then + echo 'text<> $GITHUB_OUTPUT + cat release-plan-stderr.txt >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT + else + echo 'text<> $GITHUB_OUTPUT + jq .description .release-plan.json -r >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT + rm release-plan-stderr.txt + fi + env: + GITHUB_AUTH: ${{ secrets.GITHUB_TOKEN }} + + - uses: peter-evans/create-pull-request@v6 + with: + commit-message: "Prepare Release using 'release-plan'" + labels: "internal" + branch: release-preview + title: Prepare Release + body: | + This PR is a preview of the release that [release-plan](https://github.com/embroider-build/release-plan) has prepared. To release you should just merge this PR 👍 + + ----------------------------------------- + + ${{ steps.explanation.outputs.text }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..8e9a207 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,57 @@ +# For every push to the master branch, this checks if the release-plan was +# updated and if it was it will publish stable npm packages based on the +# release plan + +name: Publish Stable + +on: + workflow_dispatch: + push: + branches: + - main + - master + +concurrency: + group: publish-${{ github.head_ref || github.ref }} + cancel-in-progress: true + +jobs: + check-plan: + name: "Check Release Plan" + runs-on: ubuntu-latest + outputs: + command: ${{ steps.check-release.outputs.command }} + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: 'main' + # This will only cause the `check-plan` job to have a result of `success` + # when the .release-plan.json file was changed on the last commit. This + # plus the fact that this action only runs on main will be enough of a guard + - id: check-release + run: if git diff --name-only HEAD HEAD~1 | grep -w -q ".release-plan.json"; then echo "command=release"; fi >> $GITHUB_OUTPUT + + publish: + name: "NPM Publish" + runs-on: ubuntu-latest + needs: check-plan + if: needs.check-plan.outputs.command == 'release' + permissions: + contents: write + pull-requests: write + + steps: + - uses: actions/checkout@v4 + - uses: wyvox/action-setup-pnpm@v3 + with: + # This creates an .npmrc that reads the NODE_AUTH_TOKEN environment variable + node-registry-url: 'https://registry.npmjs.org' + - run: pnpm install --frozen-lockfile + - name: npm publish + run: pnpm release-plan publish + + env: + GITHUB_AUTH: ${{ secrets.GITHUB_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..825c32f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog diff --git a/README.md b/README.md index 47c3148..1cf717c 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,52 @@ -# form-event +# form-data-utils -[Short description of the addon.] +[Demo](https://ember-primitives.pages.dev/6-utils/data-from-event.md) -## Compatibility -- Ember.js v4.12 or above -- Embroider or ember-auto-import v2 +A utility function for extracting the FormData as an object from the native `
` +element, allowing more ergonomic of usage of _The Platform_'s default form/fields usage. + +Each input within your `` should have a `name` attribute. +(or else the `` element doesn't know what inputs are relevant) + +This will provide values for all types of controls/fields, +- input: text, checkbox, radio, etc +- select + - behavior is fixed from browser default behavior, where + only the most recently selected value comes through in + the FormData. This fix only affects `