Initial scaffold: Shopify recesso (withdrawal) compliance app
- Remix (TypeScript) + Polaris, official Shopify app template - Prisma multi-tenant schema (Settings, ExclusionRule, WithdrawalRequest, AuditLog, WebhookEvent) on Postgres - Mandatory GDPR compliance webhooks (data_request, redact, shop/redact) + HMAC handlers - API version pinned 2026-04, scopes read_orders/read_products - Fly deploy config; two-env strategy (custom now, public later) - Dev setup: shopify.web.toml + Vite allowedHosts for tunnels - Docs: PLAN.md, ANALISI-REQUISITI-LEGALI.md (Art. 54-bis compliance) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mv83a29B4eFv5ixoj6PoE1
This commit is contained in:
18
app/.github/workflows/ci.yml
vendored
Normal file
18
app/.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
on: [push, pull_request]
|
||||
|
||||
name: CI
|
||||
|
||||
jobs:
|
||||
CI:
|
||||
name: CI_Node_${{ matrix.version }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
version: [20.19.0, 22, 24]
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: ${{ matrix.version }}
|
||||
- name: Install
|
||||
run: yarn install
|
||||
22
app/.github/workflows/cla.yml
vendored
Normal file
22
app/.github/workflows/cla.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: Contributor License Agreement (CLA)
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize]
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
cla:
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
(github.event.issue.pull_request
|
||||
&& !github.event.issue.pull_request.merged_at
|
||||
&& contains(github.event.comment.body, 'signed')
|
||||
)
|
||||
|| (github.event.pull_request && !github.event.pull_request.merged)
|
||||
steps:
|
||||
- uses: Shopify/shopify-cla-action@v1
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
cla-token: ${{ secrets.CLA_TOKEN }}
|
||||
20
app/.github/workflows/close-waiting-for-response-issues.yml
vendored
Normal file
20
app/.github/workflows/close-waiting-for-response-issues.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Close Waiting for Response Issues
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
check-need-info:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: close-issues
|
||||
uses: actions-cool/issues-helper@45d75b6cf72bf4f254be6230cb887ad002702491 # v3.6.3
|
||||
with:
|
||||
actions: "close-issues"
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
labels: "Waiting for Response"
|
||||
inactive-day: 14
|
||||
body: |
|
||||
We are closing this issue because we did not hear back regarding additional details we needed to resolve this issue. If the issue persists and you are able to provide the missing clarification we need, you can respond here or create a new issue.
|
||||
|
||||
We appreciate your understanding as we try to manage our number of open issues.
|
||||
99
app/.github/workflows/convert-to-js.yml
vendored
Normal file
99
app/.github/workflows/convert-to-js.yml
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
name: Create Javascript conversion PR
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
convert-ts-files:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0
|
||||
|
||||
- name: Create lock file
|
||||
run: touch yarn.lock
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: 22.12.x
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn add -W --dev @shopify/eslint-plugin --ignore-engines
|
||||
|
||||
- name: Create temporary tsconfig file
|
||||
run: |
|
||||
echo '{
|
||||
"include": ["./app/**/*", "*.ts", "*.tsx", ".graphqlrc.ts"],
|
||||
"compilerOptions": {
|
||||
"strict": true,
|
||||
"removeComments": false,
|
||||
"skipLibCheck": true,
|
||||
"isolatedModules": true,
|
||||
"noEmitOnError": true,
|
||||
"jsx": "preserve",
|
||||
"module": "ES2022",
|
||||
"moduleResolution": "bundler",
|
||||
"target": "ES2022",
|
||||
"paths": {
|
||||
"~/*": ["./app/*"]
|
||||
}
|
||||
}
|
||||
}' > tsconfig.js.json
|
||||
|
||||
- name: Transpile to Javascript
|
||||
run: yarn tsc -p tsconfig.js.json
|
||||
|
||||
- name: Remove Typescript files
|
||||
run: |
|
||||
find app \( -name "*.ts" -o -name "*.tsx" \) -delete
|
||||
find . \( -name ".graphqlrc.ts" -o -name "tsconfig.js.json" -o -name "vite.config.ts" \) -delete
|
||||
|
||||
- name: Run prettier
|
||||
run: yarn prettier -w "app/**/*.{js,jsx}" ".graphqlrc.js" "vite.config.js"
|
||||
|
||||
- name: Run ESLint
|
||||
run: |
|
||||
yarn lint "app/**/*.{js,jsx}" ".graphqlrc.js" "vite.config.js" --fix --no-cache --ignore-pattern "\!.graphqlrc.js" --plugin @shopify/eslint-plugin --rule '{
|
||||
"import/order": "error",
|
||||
"import/newline-after-import": "error",
|
||||
"padding-line-between-statements": ["error",
|
||||
{ "blankLine": "always", "prev": ["const", "let", "var"], "next": "*"},
|
||||
{ "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"]}
|
||||
{ "blankLine": "always", "prev": "*", "next": "return" },
|
||||
{ "blankLine": "always", "prev": "*", "next": "export" },
|
||||
{ "blankLine": "never", "prev": "export", "next": "export" },
|
||||
{ "blankLine": "always", "prev": "*", "next": "block-like" },
|
||||
{ "blankLine": "always", "prev": "block-like", "next": "*" }
|
||||
]}'
|
||||
|
||||
- name: Prepare files for git
|
||||
run: |
|
||||
git config user.name GitHub
|
||||
git config user.email noreply@github.com
|
||||
git fetch
|
||||
git restore --staged package.json
|
||||
git restore package.json
|
||||
|
||||
- name: Stage changes to files
|
||||
run: |
|
||||
git add .
|
||||
git checkout -b temp_javascript_updates
|
||||
git commit -m "Convert template to Javascript"
|
||||
git checkout javascript
|
||||
git pull
|
||||
git checkout -
|
||||
git rebase -m -X theirs javascript
|
||||
git push -f origin temp_javascript_updates:javascript_updates
|
||||
|
||||
- name: Create Javascript PR
|
||||
run: |
|
||||
gh pr view --json mergedAt -q ".mergedAt" javascript_updates | grep -E "^$" || \
|
||||
gh pr create -B javascript -H javascript_updates --title 'Convert template to Javascript' --body 'This is an automated PR that converts the latest changes from Typescript to Javascript'
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
15
app/.github/workflows/remove-labels-on-activity.yml
vendored
Normal file
15
app/.github/workflows/remove-labels-on-activity.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
name: Remove Waiting Labels
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
remove-labels-on-activity:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0
|
||||
- uses: actions-ecosystem/action-remove-labels@2ce5d41b4b6aa8503e285553f75ed56e0a40bae0 # v1.2.0
|
||||
if: contains(github.event.issue.labels.*.name, 'Waiting for Response')
|
||||
with:
|
||||
labels: |
|
||||
Waiting for Response
|
||||
Reference in New Issue
Block a user