diff --git a/.github/workflows/neon_workflow.yml b/.github/workflows/neon_workflow.yml new file mode 100644 index 0000000..b5a9cac --- /dev/null +++ b/.github/workflows/neon_workflow.yml @@ -0,0 +1,114 @@ +name: Create/Delete Branch for Pull Request + +on: + pull_request: + types: + - opened + - reopened + - synchronize + - closed + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + +jobs: + setup: + name: Setup + outputs: + branch: ${{ steps.branch_name.outputs.current_branch }} + runs-on: ubuntu-latest + steps: + - name: Get branch name + id: branch_name + uses: tj-actions/branch-names@v8 + + create_neon_branch: + name: Create Neon Branch + permissions: + contents: read + outputs: + db_url: ${{ steps.create_neon_branch.outputs.db_url }} + db_url_pooled: ${{ steps.create_neon_branch.outputs.db_url_pooled }} + needs: setup + if: | + github.event_name == 'pull_request' && ( + github.event.action == 'synchronize' + || github.event.action == 'opened' + || github.event.action == 'reopened') + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Get branch expiration date as an env variable (2 weeks from now) + id: get_expiration_date + run: echo "EXPIRES_AT=$(date -u --date '+14 days' +'%Y-%m-%dT%H:%M:%SZ')" >> "$GITHUB_ENV" + + - name: Create Neon Branch + id: create_neon_branch + uses: neondatabase/create-branch-action@v6 + with: + project_id: ${{ vars.NEON_PROJECT_ID }} + branch_name: preview/pr-${{ github.event.number }}-${{ needs.setup.outputs.branch }} + api_key: ${{ secrets.NEON_API_KEY }} + expires_at: ${{ env.EXPIRES_AT }} + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: yarn + + - name: Enable Corepack (Yarn from packageManager) + run: corepack enable + + - name: Install dependencies + run: yarn install --immutable + +# The step above creates a new Neon branch. +# You may want to do something with the new branch, such as run migrations, run tests +# on it, or send the connection details to a hosting platform environment. +# The branch DATABASE_URL is available to you via: +# "${{ steps.create_neon_branch.outputs.db_url_pooled }}". +# It's important you don't log the DATABASE_URL as output as it contains a username and +# password for your database. + - name: Run Migrations + run: yarn db:push + env: + # to use pooled connection + #DATABASE_URL: "${{ steps.create_neon_branch.outputs.db_url_pooled }}" + # OR to use unpooled connection + DATABASE_URL: "${{ steps.create_neon_branch.outputs.db_url }}" + +# Following the step above, which runs database migrations, you may want to check +# for schema changes in your database. We recommend using the following action to +# post a comment to your pull request with the schema diff. For this action to work, +# you also need to give permissions to the workflow job to be able to post comments +# and read your repository contents. Add the following permissions to the workflow job: +# +# permissions: +# contents: read +# pull-requests: write +# +# You can also check out https://github.com/neondatabase/schema-diff-action for more +# information on how to use the schema diff action. +# You can uncomment the lines below to enable the schema diff action. +# - name: Post Schema Diff Comment to PR +# uses: neondatabase/schema-diff-action@v1 +# with: +# project_id: ${{ vars.NEON_PROJECT_ID }} +# compare_branch: preview/pr-${{ github.event.number }}-${{ needs.setup.outputs.branch }} +# api_key: ${{ secrets.NEON_API_KEY }} + + delete_neon_branch: + name: Delete Neon Branch + needs: setup + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + steps: + - name: Delete Neon Branch + uses: neondatabase/delete-branch-action@v3 + with: + project_id: ${{ vars.NEON_PROJECT_ID }} + branch: preview/pr-${{ github.event.number }}-${{ needs.setup.outputs.branch }} + api_key: ${{ secrets.NEON_API_KEY }} diff --git a/README.md b/README.md index a86eca8..121576e 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ flowchart LR subgraph internet ["☁️ Public Internet"] P["Provider\nGitHub · Stripe · Slack"] C["clawproxy\n(public endpoint)"] - Q[("Durable\nqueue")] + Q[("Safe\nstorage")] end subgraph private ["🔒 Your Private Network"] @@ -34,7 +34,7 @@ flowchart LR ``` 1. **A provider** (GitHub, Stripe, Slack, …) sends a webhook to your public clawproxy URL. -2. **clawproxy** accepts the request, validates it, and persists the event to a durable queue. +2. **clawproxy** accepts the request, validates it, and stores the event safely until your node connects. 3. **Your OpenClaw node** — running behind NAT or a private LAN — connects to clawproxy over an outbound connection, receives queued events, processes them locally, and acknowledges delivery. Your private node never needs an open port or firewall rule. diff --git a/app/page.tsx b/app/page.tsx index 0e3f365..772c4bf 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -164,7 +164,7 @@ export default function Home() { }, { title: 'Ingress accepted', - body: 'Request validated and persisted to the durable queue.', + body: 'Validated and saved safely until delivery to your node.', }, { title: 'Live push or pull', @@ -197,7 +197,7 @@ export default function Home() {

Storage

-

Durable queue

+

Safe until delivery

Ideal for

diff --git a/components/app/architecture-diagram.tsx b/components/app/architecture-diagram.tsx index 3bde9ee..a4bf4c6 100644 --- a/components/app/architecture-diagram.tsx +++ b/components/app/architecture-diagram.tsx @@ -159,7 +159,7 @@ export function ArchitectureDiagram() { accent label="clawproxy" sublabel="Public cloud" - items={['Accepts & validates', 'Stores in durable queue', 'Manages delivery state']} + items={['Accepts & validates', 'Saves events until delivery', 'Manages delivery state']} />