Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
1dbe076
Fix Windows compatibility
hach-que Apr 19, 2026
3118eff
Publish to NPM instead of GitHub
hach-que Apr 19, 2026
ec58f19
Upgrade React libraries to 19.2.5
hach-que Apr 19, 2026
f741fad
Try to fix package redirects
hach-que Apr 19, 2026
1d6a1a3
Directly rename all package references
hach-que Apr 19, 2026
faa7ff3
Try to fix package resolution for Yarn
hach-que Apr 19, 2026
0c2db09
Add HTTPS support to dev server
hach-que Apr 20, 2026
7533c05
Add headers function
hach-que Apr 20, 2026
786dfb7
Fix hot reload
hach-que Apr 20, 2026
72b80c2
Add source maps
hach-que Apr 20, 2026
be154d5
Fix server actions that redirect when used with `useActionState`
hach-que Apr 20, 2026
106ae86
Add support for Sentry tracing
hach-que Apr 21, 2026
d609bc2
Add @sentry/cli to peer dependencies
hach-que Apr 21, 2026
4f6b226
Fix SENTRY_RELEASE parameter for source map upload
hach-que Apr 21, 2026
395a35c
Create dependabot.yml
hach-que Apr 22, 2026
25ee93a
Prevent pnpm-lock.yaml file from being automatically merged
hach-que Apr 22, 2026
46d1602
Bump globals from 16.5.0 to 17.5.0 (#2)
dependabot[bot] Apr 22, 2026
3505a99
Bump @tailwindcss/node from 4.1.14 to 4.2.4 (#3)
dependabot[bot] Apr 22, 2026
3ccaed6
Bump zod from 4.1.11 to 4.3.6 (#5)
dependabot[bot] Apr 22, 2026
f2081f6
Bump marked from 16.4.2 to 18.0.2 (#4)
dependabot[bot] Apr 22, 2026
d80a31c
Bump typescript-eslint from 8.58.2 to 8.59.0 (#6)
dependabot[bot] Apr 22, 2026
25bb469
Bump @eslint/js from 9.39.4 to 10.0.1 (#7)
dependabot[bot] Apr 22, 2026
65a363c
Skip sourcemap upload if Sentry environment variables are not set
hach-que Apr 22, 2026
143c1d5
Add test pages for deep dynamic vs static
hach-que Apr 22, 2026
2f422ec
Ensure static paths are always selected over dynamic paths
hach-que Apr 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": false,
"commit": false,
"fixed": [["@twofold/framework", "eslint-plugin-twofold"]],
"fixed": [["@redpointgames/framework", "@redpointgames/eslint-plugin-twofold"]],
"linked": [],
"access": "restricted",
"baseBranch": "main",
Expand Down
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# prevent Git from merging the lockfile in a way that makes it corrupt
pnpm-lock.yaml binary
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
56 changes: 27 additions & 29 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ on:
pull_request:
branches: ["main"]

permissions:
id-token: write
packages: write

jobs:
build-and-publish:
name: "Build and Publish"
Expand All @@ -16,6 +20,24 @@ jobs:
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: "24"
registry-url: "https://registry.npmjs.org"
- name: Set package versions
run: |
# discover package files
export PACKAGE_JSON_FILES=$(find . -name package.json -not -path "*/node_modules/*")

# generate version
export PACKAGE_VERSION_SUFFIX="dev$(date +%Y%m%d%H%M%S)"

# set repository
for PACKAGE_JSON in $PACKAGE_JSON_FILES; do jq ".repository |= \"https://github.com/$GITHUB_REPOSITORY\"" $PACKAGE_JSON > $PACKAGE_JSON.tmp; mv $PACKAGE_JSON.tmp $PACKAGE_JSON; done

# update versions
for PACKAGE_JSON in $PACKAGE_JSON_FILES; do jq ".version |= (match(\"^([0-9.]+)\").captures[0].string + \"-$PACKAGE_VERSION_SUFFIX\")" $PACKAGE_JSON > $PACKAGE_JSON.tmp; mv $PACKAGE_JSON.tmp $PACKAGE_JSON; done
- name: Install Dependencies
run: |
corepack enable
Expand All @@ -28,43 +50,19 @@ jobs:
pnpm lint
popd
done
- name: Push to GitHub
- name: Push to NPM
if: github.event_name != 'pull_request'
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
export PACKAGE_NAMESPACE=$GITHUB_REPOSITORY_OWNER

PACKAGE_JSON_FILES=$(find . -name package.json -not -path "*/node_modules/*")

# set repository
for PACKAGE_JSON in $PACKAGE_JSON_FILES; do jq ".repository |= \"https://github.com/$GITHUB_REPOSITORY\"" $PACKAGE_JSON > $PACKAGE_JSON.tmp; mv $PACKAGE_JSON.tmp $PACKAGE_JSON; done

# rename package versions
export PACKAGE_VERSION_SUFFIX="dev.$(date +%Y.%m.%d.%H.%M.%S)+$(git rev-parse --short HEAD)"
for PACKAGE_JSON in $PACKAGE_JSON_FILES; do jq ".version |= (match(\"^([0-9.]+)\").captures[0].string + \"-$PACKAGE_VERSION_SUFFIX\")" $PACKAGE_JSON > $PACKAGE_JSON.tmp; mv $PACKAGE_JSON.tmp $PACKAGE_JSON; done

# rename package names
for PACKAGE_JSON in $PACKAGE_JSON_FILES; do jq ".name |= sub(\"@twofold\"; \"@$PACKAGE_NAMESPACE\")" $PACKAGE_JSON > $PACKAGE_JSON.tmp; mv $PACKAGE_JSON.tmp $PACKAGE_JSON; done
for PACKAGE_JSON in $PACKAGE_JSON_FILES; do jq ".name |= sub(\"create-twofold-app\"; \"@$PACKAGE_NAMESPACE/create-twofold-app\")" $PACKAGE_JSON > $PACKAGE_JSON.tmp; mv $PACKAGE_JSON.tmp $PACKAGE_JSON; done
for PACKAGE_JSON in $PACKAGE_JSON_FILES; do jq ".name |= sub(\"eslint-plugin-twofold\"; \"@$PACKAGE_NAMESPACE/eslint-plugin-twofold\")" $PACKAGE_JSON > $PACKAGE_JSON.tmp; mv $PACKAGE_JSON.tmp $PACKAGE_JSON; done

# rename package references
for PACKAGE_JSON in $PACKAGE_JSON_FILES; do jq ".dependencies = (.dependencies // {}) | (to_entries | map({key: (.key | sub(\"@twofold/\"; \"@$PACKAGE_NAMESPACE/\")), value: .value}) | from_entries)" $PACKAGE_JSON > $PACKAGE_JSON.tmp; mv $PACKAGE_JSON.tmp $PACKAGE_JSON; done

# compile and package again
# PACKAGE_NAMESPACE is read by compile.js and rewrites imports
# in built code once compiled
# compile
pnpm compile

# publish packages
# publish
for PACKAGE in packages/*; do
pushd $PACKAGE
cat >.npmrc <<EOF
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
@${GITHUB_REPOSITORY_OWNER}:registry=https://npm.pkg.github.com/
@${PACKAGE_NAMESPACE}:registry=https://registry.npmjs.org/
always-auth=true
EOF
pnpm publish --no-git-checks
pnpm publish --no-git-checks --tag latest --access public
popd
done
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ RUN npm install -g corepack@latest && \
FROM base AS build
COPY . /usr/src/twofold
WORKDIR /usr/src/twofold
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --filter="@twofold/framework..." --prod=false --frozen-lockfile
RUN pnpm run --filter="@twofold/framework..." compile
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --filter="@redpointgames/framework..." --prod=false --frozen-lockfile
RUN pnpm run --filter="@redpointgames/framework..." compile
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --filter="website..." --prod=false --frozen-lockfile
RUN pnpm run --filter=website build

Expand Down
Loading
Loading