@meddleware/token-deployer-ui 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish.yml +367 -0
- package/Dockerfile +96 -0
- package/package.json +3 -3
- package/scripts/sync-template-src.sh +1 -1
- package/tests/templateParity.test.ts +1 -1
- package/.env.production +0 -7
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
IMAGE: token-deployer-ui
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
# ── Library source: @meddleware/token-deployer-ui → npmjs ──────────────────
|
|
13
|
+
# Uses OIDC trusted publisher — no static NPM_TOKEN secret required.
|
|
14
|
+
publish-npm:
|
|
15
|
+
name: npmjs (@meddleware/token-deployer-ui)
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
id-token: write
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v7.0.1
|
|
22
|
+
|
|
23
|
+
- uses: actions/setup-node@v7.0.0
|
|
24
|
+
with:
|
|
25
|
+
node-version: '24'
|
|
26
|
+
registry-url: 'https://registry.npmjs.org'
|
|
27
|
+
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: npm ci
|
|
30
|
+
|
|
31
|
+
- name: Type-check
|
|
32
|
+
run: npm run type-check
|
|
33
|
+
|
|
34
|
+
- name: Test
|
|
35
|
+
run: npm test
|
|
36
|
+
|
|
37
|
+
- name: Publish to npmjs (provenance via OIDC, idempotent)
|
|
38
|
+
run: |
|
|
39
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
40
|
+
if npm view "@meddleware/token-deployer-ui@${VERSION}" version >/dev/null 2>&1; then
|
|
41
|
+
echo "::notice::v${VERSION} already published to npmjs — skipping"
|
|
42
|
+
else
|
|
43
|
+
npm publish --provenance
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# ── App: Docker image → quay.io + Docker Hub ────────────────────────────────
|
|
47
|
+
# Split into per-arch native builds + merge so each platform compiles on its
|
|
48
|
+
# own native runner. The arm64 Vite build runs on ubuntu-24.04-arm rather than
|
|
49
|
+
# QEMU emulation, eliminating the ~3-5× slowdown for npm install + tsc + vite.
|
|
50
|
+
|
|
51
|
+
build-docker-amd64-public:
|
|
52
|
+
name: Docker amd64 (quay.io + Docker Hub)
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
permissions:
|
|
55
|
+
contents: read
|
|
56
|
+
steps:
|
|
57
|
+
- uses: actions/checkout@v7.0.1
|
|
58
|
+
- uses: docker/setup-buildx-action@v4.3.0
|
|
59
|
+
|
|
60
|
+
- name: Log in to quay.io
|
|
61
|
+
uses: docker/login-action@v4.6.0
|
|
62
|
+
with:
|
|
63
|
+
registry: quay.io
|
|
64
|
+
username: ${{ secrets.QUAY_USERNAME }}
|
|
65
|
+
password: ${{ secrets.QUAY_TOKEN }}
|
|
66
|
+
|
|
67
|
+
- name: Log in to Docker Hub
|
|
68
|
+
uses: docker/login-action@v4.6.0
|
|
69
|
+
with:
|
|
70
|
+
registry: docker.io
|
|
71
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
72
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
73
|
+
|
|
74
|
+
- name: Build and push (linux/amd64)
|
|
75
|
+
uses: docker/build-push-action@v7.3.0
|
|
76
|
+
with:
|
|
77
|
+
context: .
|
|
78
|
+
platforms: linux/amd64
|
|
79
|
+
push: true
|
|
80
|
+
tags: |
|
|
81
|
+
quay.io/${{ vars.QUAY_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-amd64
|
|
82
|
+
docker.io/${{ vars.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-amd64
|
|
83
|
+
cache-from: type=gha,scope=amd64-public
|
|
84
|
+
cache-to: type=gha,scope=amd64-public,mode=max
|
|
85
|
+
build-args: |
|
|
86
|
+
VITE_NETWORK=${{ vars.VITE_NETWORK || 'testnet' }}
|
|
87
|
+
VITE_FEE_TREASURY_TESTNET=${{ vars.VITE_FEE_TREASURY_TESTNET }}
|
|
88
|
+
VITE_FEE_TREASURY_MAINNET=${{ vars.VITE_FEE_TREASURY_MAINNET }}
|
|
89
|
+
VITE_FEE_MIST=${{ vars.VITE_FEE_MIST }}
|
|
90
|
+
VITE_WALRUS_RELAY_TESTNET=${{ vars.VITE_WALRUS_RELAY_TESTNET }}
|
|
91
|
+
VITE_WALRUS_RELAY_MAINNET=${{ vars.VITE_WALRUS_RELAY_MAINNET }}
|
|
92
|
+
VITE_ACCESS_GATE_ID_TESTNET=${{ vars.VITE_ACCESS_GATE_ID_TESTNET }}
|
|
93
|
+
VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_TESTNET }}
|
|
94
|
+
VITE_ACCESS_GATE_SOULBOUND_TESTNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_TESTNET }}
|
|
95
|
+
VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_TESTNET }}
|
|
96
|
+
VITE_ACCESS_GATE_ID_MAINNET=${{ vars.VITE_ACCESS_GATE_ID_MAINNET }}
|
|
97
|
+
VITE_ACCESS_GATE_NFT_TYPE_MAINNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_MAINNET }}
|
|
98
|
+
VITE_ACCESS_GATE_SOULBOUND_MAINNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_MAINNET }}
|
|
99
|
+
VITE_ACCESS_GATE_PRICE_MIST_MAINNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_MAINNET }}
|
|
100
|
+
VITE_WALRUS_MAX_TIP_MIST=${{ vars.VITE_WALRUS_MAX_TIP_MIST }}
|
|
101
|
+
VITE_PUBLIC_URL=${{ vars.VITE_PUBLIC_URL }}
|
|
102
|
+
|
|
103
|
+
build-docker-arm64-public:
|
|
104
|
+
name: Docker arm64 (quay.io + Docker Hub)
|
|
105
|
+
runs-on: ubuntu-24.04-arm
|
|
106
|
+
permissions:
|
|
107
|
+
contents: read
|
|
108
|
+
steps:
|
|
109
|
+
- uses: actions/checkout@v7.0.1
|
|
110
|
+
- uses: docker/setup-buildx-action@v4.3.0
|
|
111
|
+
|
|
112
|
+
- name: Log in to quay.io
|
|
113
|
+
uses: docker/login-action@v4.6.0
|
|
114
|
+
with:
|
|
115
|
+
registry: quay.io
|
|
116
|
+
username: ${{ secrets.QUAY_USERNAME }}
|
|
117
|
+
password: ${{ secrets.QUAY_TOKEN }}
|
|
118
|
+
|
|
119
|
+
- name: Log in to Docker Hub
|
|
120
|
+
uses: docker/login-action@v4.6.0
|
|
121
|
+
with:
|
|
122
|
+
registry: docker.io
|
|
123
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
124
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
125
|
+
|
|
126
|
+
- name: Build and push (linux/arm64)
|
|
127
|
+
uses: docker/build-push-action@v7.3.0
|
|
128
|
+
with:
|
|
129
|
+
context: .
|
|
130
|
+
platforms: linux/arm64
|
|
131
|
+
push: true
|
|
132
|
+
tags: |
|
|
133
|
+
quay.io/${{ vars.QUAY_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-arm64
|
|
134
|
+
docker.io/${{ vars.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-arm64
|
|
135
|
+
cache-from: type=gha,scope=arm64-public
|
|
136
|
+
cache-to: type=gha,scope=arm64-public,mode=max
|
|
137
|
+
build-args: |
|
|
138
|
+
VITE_NETWORK=${{ vars.VITE_NETWORK || 'testnet' }}
|
|
139
|
+
VITE_FEE_TREASURY_TESTNET=${{ vars.VITE_FEE_TREASURY_TESTNET }}
|
|
140
|
+
VITE_FEE_TREASURY_MAINNET=${{ vars.VITE_FEE_TREASURY_MAINNET }}
|
|
141
|
+
VITE_FEE_MIST=${{ vars.VITE_FEE_MIST }}
|
|
142
|
+
VITE_WALRUS_RELAY_TESTNET=${{ vars.VITE_WALRUS_RELAY_TESTNET }}
|
|
143
|
+
VITE_WALRUS_RELAY_MAINNET=${{ vars.VITE_WALRUS_RELAY_MAINNET }}
|
|
144
|
+
VITE_ACCESS_GATE_ID_TESTNET=${{ vars.VITE_ACCESS_GATE_ID_TESTNET }}
|
|
145
|
+
VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_TESTNET }}
|
|
146
|
+
VITE_ACCESS_GATE_SOULBOUND_TESTNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_TESTNET }}
|
|
147
|
+
VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_TESTNET }}
|
|
148
|
+
VITE_ACCESS_GATE_ID_MAINNET=${{ vars.VITE_ACCESS_GATE_ID_MAINNET }}
|
|
149
|
+
VITE_ACCESS_GATE_NFT_TYPE_MAINNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_MAINNET }}
|
|
150
|
+
VITE_ACCESS_GATE_SOULBOUND_MAINNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_MAINNET }}
|
|
151
|
+
VITE_ACCESS_GATE_PRICE_MIST_MAINNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_MAINNET }}
|
|
152
|
+
VITE_WALRUS_MAX_TIP_MIST=${{ vars.VITE_WALRUS_MAX_TIP_MIST }}
|
|
153
|
+
VITE_PUBLIC_URL=${{ vars.VITE_PUBLIC_URL }}
|
|
154
|
+
|
|
155
|
+
merge-docker-public:
|
|
156
|
+
name: Merge + sign (quay.io + Docker Hub)
|
|
157
|
+
needs: [build-docker-amd64-public, build-docker-arm64-public]
|
|
158
|
+
runs-on: ubuntu-latest
|
|
159
|
+
permissions:
|
|
160
|
+
contents: read
|
|
161
|
+
id-token: write
|
|
162
|
+
attestations: write
|
|
163
|
+
steps:
|
|
164
|
+
- uses: docker/setup-buildx-action@v4.3.0
|
|
165
|
+
|
|
166
|
+
- name: Log in to quay.io
|
|
167
|
+
uses: docker/login-action@v4.6.0
|
|
168
|
+
with:
|
|
169
|
+
registry: quay.io
|
|
170
|
+
username: ${{ secrets.QUAY_USERNAME }}
|
|
171
|
+
password: ${{ secrets.QUAY_TOKEN }}
|
|
172
|
+
|
|
173
|
+
- name: Log in to Docker Hub
|
|
174
|
+
uses: docker/login-action@v4.6.0
|
|
175
|
+
with:
|
|
176
|
+
registry: docker.io
|
|
177
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
178
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
179
|
+
|
|
180
|
+
- name: Compute final tags and labels
|
|
181
|
+
id: meta
|
|
182
|
+
uses: docker/metadata-action@v6.2.0
|
|
183
|
+
with:
|
|
184
|
+
images: |
|
|
185
|
+
quay.io/${{ vars.QUAY_NAMESPACE }}/${{ env.IMAGE }}
|
|
186
|
+
docker.io/${{ vars.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE }}
|
|
187
|
+
tags: |
|
|
188
|
+
type=semver,pattern={{version}}
|
|
189
|
+
type=semver,pattern={{major}}.{{minor}}
|
|
190
|
+
flavor: |
|
|
191
|
+
latest=auto
|
|
192
|
+
|
|
193
|
+
- name: Merge multi-arch manifests
|
|
194
|
+
id: merge
|
|
195
|
+
env:
|
|
196
|
+
QUAY_NS: ${{ vars.QUAY_NAMESPACE }}
|
|
197
|
+
DOCKERHUB_NS: ${{ vars.DOCKERHUB_NAMESPACE }}
|
|
198
|
+
SHA: ${{ github.sha }}
|
|
199
|
+
run: |
|
|
200
|
+
QUAY_SRC="quay.io/${QUAY_NS}/${IMAGE}:${SHA}"
|
|
201
|
+
HUB_SRC="docker.io/${DOCKERHUB_NS}/${IMAGE}:${SHA}"
|
|
202
|
+
|
|
203
|
+
QUAY_FLAGS=""
|
|
204
|
+
HUB_FLAGS=""
|
|
205
|
+
while IFS= read -r tag; do
|
|
206
|
+
if [[ "$tag" == quay.io/* ]]; then
|
|
207
|
+
QUAY_FLAGS="$QUAY_FLAGS --tag $tag"
|
|
208
|
+
elif [[ "$tag" == docker.io/* ]]; then
|
|
209
|
+
HUB_FLAGS="$HUB_FLAGS --tag $tag"
|
|
210
|
+
fi
|
|
211
|
+
done <<< "${{ steps.meta.outputs.tags }}"
|
|
212
|
+
|
|
213
|
+
docker buildx imagetools create $QUAY_FLAGS "${QUAY_SRC}-amd64" "${QUAY_SRC}-arm64"
|
|
214
|
+
docker buildx imagetools create $HUB_FLAGS "${HUB_SRC}-amd64" "${HUB_SRC}-arm64"
|
|
215
|
+
|
|
216
|
+
PRIMARY=$(echo "${{ steps.meta.outputs.tags }}" | grep 'quay.io' | grep -v 'latest' | head -1)
|
|
217
|
+
DIGEST=$(docker buildx imagetools inspect "${PRIMARY}" --format '{{.Manifest.Digest}}')
|
|
218
|
+
echo "digest=${DIGEST}" >> "$GITHUB_OUTPUT"
|
|
219
|
+
|
|
220
|
+
- uses: sigstore/cosign-installer@v4.1.2
|
|
221
|
+
|
|
222
|
+
- name: Sign images (keyless)
|
|
223
|
+
env:
|
|
224
|
+
DIGEST: ${{ steps.merge.outputs.digest }}
|
|
225
|
+
QUAY_NS: ${{ vars.QUAY_NAMESPACE }}
|
|
226
|
+
DOCKERHUB_NS: ${{ vars.DOCKERHUB_NAMESPACE }}
|
|
227
|
+
run: |
|
|
228
|
+
cosign sign --yes "quay.io/${QUAY_NS}/${IMAGE}@${DIGEST}"
|
|
229
|
+
cosign sign --yes "docker.io/${DOCKERHUB_NS}/${IMAGE}@${DIGEST}"
|
|
230
|
+
|
|
231
|
+
- name: Attest build provenance (quay.io)
|
|
232
|
+
uses: actions/attest-build-provenance@v4.2.2
|
|
233
|
+
continue-on-error: true
|
|
234
|
+
with:
|
|
235
|
+
subject-name: quay.io/${{ vars.QUAY_NAMESPACE }}/${{ env.IMAGE }}
|
|
236
|
+
subject-digest: ${{ steps.merge.outputs.digest }}
|
|
237
|
+
push-to-registry: true
|
|
238
|
+
|
|
239
|
+
- name: Attest build provenance (Docker Hub)
|
|
240
|
+
uses: actions/attest-build-provenance@v4.2.2
|
|
241
|
+
continue-on-error: true
|
|
242
|
+
with:
|
|
243
|
+
subject-name: docker.io/${{ vars.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE }}
|
|
244
|
+
subject-digest: ${{ steps.merge.outputs.digest }}
|
|
245
|
+
push-to-registry: true
|
|
246
|
+
|
|
247
|
+
- name: Summary
|
|
248
|
+
run: echo "Published & signed @ ${{ steps.merge.outputs.digest }}" >> "$GITHUB_STEP_SUMMARY"
|
|
249
|
+
|
|
250
|
+
# ── Self-hosted registry (best-effort) ─────────────────────────────────────
|
|
251
|
+
|
|
252
|
+
build-docker-amd64-private:
|
|
253
|
+
name: Docker amd64 (self-hosted registry)
|
|
254
|
+
runs-on: ubuntu-latest
|
|
255
|
+
continue-on-error: true
|
|
256
|
+
permissions:
|
|
257
|
+
contents: read
|
|
258
|
+
steps:
|
|
259
|
+
- uses: actions/checkout@v7.0.1
|
|
260
|
+
- uses: docker/setup-buildx-action@v4.3.0
|
|
261
|
+
|
|
262
|
+
- name: Log in to self-hosted registry
|
|
263
|
+
uses: docker/login-action@v4.6.0
|
|
264
|
+
with:
|
|
265
|
+
registry: ${{ vars.PRIVATE_REGISTRY }}
|
|
266
|
+
username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }}
|
|
267
|
+
password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }}
|
|
268
|
+
|
|
269
|
+
- name: Build and push (linux/amd64)
|
|
270
|
+
uses: docker/build-push-action@v7.3.0
|
|
271
|
+
with:
|
|
272
|
+
context: .
|
|
273
|
+
platforms: linux/amd64
|
|
274
|
+
push: true
|
|
275
|
+
tags: ${{ vars.PRIVATE_REGISTRY }}/${{ vars.PRIVATE_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-amd64
|
|
276
|
+
cache-from: type=gha,scope=amd64-private
|
|
277
|
+
cache-to: type=gha,scope=amd64-private,mode=max
|
|
278
|
+
build-args: |
|
|
279
|
+
VITE_NETWORK=${{ vars.VITE_NETWORK || 'testnet' }}
|
|
280
|
+
VITE_FEE_TREASURY_TESTNET=${{ vars.VITE_FEE_TREASURY_TESTNET }}
|
|
281
|
+
VITE_FEE_TREASURY_MAINNET=${{ vars.VITE_FEE_TREASURY_MAINNET }}
|
|
282
|
+
VITE_FEE_MIST=${{ vars.VITE_FEE_MIST }}
|
|
283
|
+
VITE_WALRUS_RELAY_TESTNET=${{ vars.VITE_WALRUS_RELAY_TESTNET }}
|
|
284
|
+
VITE_ACCESS_GATE_ID_TESTNET=${{ vars.VITE_ACCESS_GATE_ID_TESTNET }}
|
|
285
|
+
VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_TESTNET }}
|
|
286
|
+
VITE_ACCESS_GATE_SOULBOUND_TESTNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_TESTNET }}
|
|
287
|
+
VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_TESTNET }}
|
|
288
|
+
VITE_WALRUS_MAX_TIP_MIST=${{ vars.VITE_WALRUS_MAX_TIP_MIST }}
|
|
289
|
+
|
|
290
|
+
build-docker-arm64-private:
|
|
291
|
+
name: Docker arm64 (self-hosted registry)
|
|
292
|
+
runs-on: ubuntu-24.04-arm
|
|
293
|
+
continue-on-error: true
|
|
294
|
+
permissions:
|
|
295
|
+
contents: read
|
|
296
|
+
steps:
|
|
297
|
+
- uses: actions/checkout@v7.0.1
|
|
298
|
+
- uses: docker/setup-buildx-action@v4.3.0
|
|
299
|
+
|
|
300
|
+
- name: Log in to self-hosted registry
|
|
301
|
+
uses: docker/login-action@v4.6.0
|
|
302
|
+
with:
|
|
303
|
+
registry: ${{ vars.PRIVATE_REGISTRY }}
|
|
304
|
+
username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }}
|
|
305
|
+
password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }}
|
|
306
|
+
|
|
307
|
+
- name: Build and push (linux/arm64)
|
|
308
|
+
uses: docker/build-push-action@v7.3.0
|
|
309
|
+
with:
|
|
310
|
+
context: .
|
|
311
|
+
platforms: linux/arm64
|
|
312
|
+
push: true
|
|
313
|
+
tags: ${{ vars.PRIVATE_REGISTRY }}/${{ vars.PRIVATE_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-arm64
|
|
314
|
+
cache-from: type=gha,scope=arm64-private
|
|
315
|
+
cache-to: type=gha,scope=arm64-private,mode=max
|
|
316
|
+
build-args: |
|
|
317
|
+
VITE_NETWORK=${{ vars.VITE_NETWORK || 'testnet' }}
|
|
318
|
+
VITE_FEE_TREASURY_TESTNET=${{ vars.VITE_FEE_TREASURY_TESTNET }}
|
|
319
|
+
VITE_FEE_TREASURY_MAINNET=${{ vars.VITE_FEE_TREASURY_MAINNET }}
|
|
320
|
+
VITE_FEE_MIST=${{ vars.VITE_FEE_MIST }}
|
|
321
|
+
VITE_WALRUS_RELAY_TESTNET=${{ vars.VITE_WALRUS_RELAY_TESTNET }}
|
|
322
|
+
VITE_ACCESS_GATE_ID_TESTNET=${{ vars.VITE_ACCESS_GATE_ID_TESTNET }}
|
|
323
|
+
VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_TESTNET }}
|
|
324
|
+
VITE_ACCESS_GATE_SOULBOUND_TESTNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_TESTNET }}
|
|
325
|
+
VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_TESTNET }}
|
|
326
|
+
VITE_WALRUS_MAX_TIP_MIST=${{ vars.VITE_WALRUS_MAX_TIP_MIST }}
|
|
327
|
+
|
|
328
|
+
merge-docker-private:
|
|
329
|
+
name: Merge (self-hosted registry)
|
|
330
|
+
needs: [build-docker-amd64-private, build-docker-arm64-private]
|
|
331
|
+
runs-on: ubuntu-latest
|
|
332
|
+
continue-on-error: true
|
|
333
|
+
permissions:
|
|
334
|
+
contents: read
|
|
335
|
+
steps:
|
|
336
|
+
- uses: docker/setup-buildx-action@v4.3.0
|
|
337
|
+
|
|
338
|
+
- name: Log in to self-hosted registry
|
|
339
|
+
uses: docker/login-action@v4.6.0
|
|
340
|
+
with:
|
|
341
|
+
registry: ${{ vars.PRIVATE_REGISTRY }}
|
|
342
|
+
username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }}
|
|
343
|
+
password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }}
|
|
344
|
+
|
|
345
|
+
- name: Compute tags
|
|
346
|
+
id: meta
|
|
347
|
+
uses: docker/metadata-action@v6.2.0
|
|
348
|
+
with:
|
|
349
|
+
images: ${{ vars.PRIVATE_REGISTRY }}/${{ vars.PRIVATE_NAMESPACE }}/${{ env.IMAGE }}
|
|
350
|
+
tags: |
|
|
351
|
+
type=semver,pattern={{version}}
|
|
352
|
+
type=semver,pattern={{major}}.{{minor}}
|
|
353
|
+
flavor: |
|
|
354
|
+
latest=auto
|
|
355
|
+
|
|
356
|
+
- name: Merge multi-arch manifests
|
|
357
|
+
env:
|
|
358
|
+
SHA: ${{ github.sha }}
|
|
359
|
+
REG: ${{ vars.PRIVATE_REGISTRY }}
|
|
360
|
+
NS: ${{ vars.PRIVATE_NAMESPACE }}
|
|
361
|
+
run: |
|
|
362
|
+
SRC="${REG}/${NS}/${IMAGE}:${SHA}"
|
|
363
|
+
FLAGS=""
|
|
364
|
+
while IFS= read -r tag; do
|
|
365
|
+
FLAGS="$FLAGS --tag $tag"
|
|
366
|
+
done <<< "${{ steps.meta.outputs.tags }}"
|
|
367
|
+
docker buildx imagetools create $FLAGS "${SRC}-amd64" "${SRC}-arm64"
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# ── build stage ───────────────────────────────────────────────────────────────
|
|
2
|
+
# Standalone build — the Docker context is this repo root. All @meddleware/*
|
|
3
|
+
# dependencies resolve from the npm registry, so they must be published before
|
|
4
|
+
# this image is built.
|
|
5
|
+
#
|
|
6
|
+
# docker build \
|
|
7
|
+
# --build-arg VITE_NETWORK=testnet \
|
|
8
|
+
# --build-arg VITE_FEE_TREASURY_TESTNET=0x... \
|
|
9
|
+
# --build-arg VITE_FEE_TREASURY_MAINNET=0x... \
|
|
10
|
+
# -t token-deployer-ui:<tag> .
|
|
11
|
+
#
|
|
12
|
+
# Build args (VITE_* are baked into the static bundle at build time):
|
|
13
|
+
# VITE_NETWORK — "testnet" | "mainnet" (default: testnet)
|
|
14
|
+
# VITE_FEE_TREASURY_TESTNET — operator treasury for testnet (REQUIRED — build fails without it)
|
|
15
|
+
# VITE_FEE_TREASURY_MAINNET — operator treasury for mainnet (REQUIRED — build fails without it)
|
|
16
|
+
# VITE_FEE_MIST — fee in MIST (optional, default 1000000000)
|
|
17
|
+
# VITE_WALRUS_RELAY_TESTNET — operator relay URL for testnet (optional)
|
|
18
|
+
# VITE_WALRUS_RELAY_MAINNET — operator relay URL for mainnet (optional)
|
|
19
|
+
# VITE_WALRUS_RPC_TESTNET — gRPC fullnode for Walrus testnet (optional)
|
|
20
|
+
# VITE_WALRUS_RPC_MAINNET — gRPC fullnode for Walrus mainnet (optional)
|
|
21
|
+
# VITE_RPC_TESTNET / VITE_RPC_MAINNET — override JSON-RPC fullnode URLs (optional)
|
|
22
|
+
# VITE_ACCESS_GATE_ID_{NET} — operator's Gate shared object ID (optional)
|
|
23
|
+
# VITE_ACCESS_GATE_NFT_TYPE_{NET} — access NFT type (optional)
|
|
24
|
+
# VITE_ACCESS_GATE_SOULBOUND_{NET} — "true" if soulbound (optional)
|
|
25
|
+
# VITE_ACCESS_GATE_PRICE_MIST_{NET} — purchase price in MIST (optional)
|
|
26
|
+
# VITE_WALRUS_MAX_TIP_MIST — max relay tip cap in MIST (optional)
|
|
27
|
+
# VITE_PUBLIC_URL — canonical origin for OG/JSON-LD (optional)
|
|
28
|
+
#
|
|
29
|
+
# .env.production is gitignored — treasury addresses must be supplied via build args.
|
|
30
|
+
FROM node:24-slim AS build
|
|
31
|
+
|
|
32
|
+
WORKDIR /app
|
|
33
|
+
|
|
34
|
+
COPY package.json package-lock.json ./
|
|
35
|
+
|
|
36
|
+
RUN npm ci
|
|
37
|
+
|
|
38
|
+
COPY . .
|
|
39
|
+
|
|
40
|
+
ARG VITE_NETWORK=testnet
|
|
41
|
+
ARG VITE_FEE_TREASURY_TESTNET
|
|
42
|
+
ARG VITE_FEE_TREASURY_MAINNET
|
|
43
|
+
ARG VITE_FEE_MIST
|
|
44
|
+
ARG VITE_WALRUS_RELAY_TESTNET
|
|
45
|
+
ARG VITE_WALRUS_RELAY_MAINNET
|
|
46
|
+
ARG VITE_WALRUS_RPC_TESTNET
|
|
47
|
+
ARG VITE_WALRUS_RPC_MAINNET
|
|
48
|
+
ARG VITE_RPC_TESTNET
|
|
49
|
+
ARG VITE_RPC_MAINNET
|
|
50
|
+
ARG VITE_ACCESS_GATE_ID_TESTNET
|
|
51
|
+
ARG VITE_ACCESS_GATE_NFT_TYPE_TESTNET
|
|
52
|
+
ARG VITE_ACCESS_GATE_SOULBOUND_TESTNET
|
|
53
|
+
ARG VITE_ACCESS_GATE_PRICE_MIST_TESTNET
|
|
54
|
+
ARG VITE_ACCESS_GATE_ID_MAINNET
|
|
55
|
+
ARG VITE_ACCESS_GATE_NFT_TYPE_MAINNET
|
|
56
|
+
ARG VITE_ACCESS_GATE_SOULBOUND_MAINNET
|
|
57
|
+
ARG VITE_ACCESS_GATE_PRICE_MIST_MAINNET
|
|
58
|
+
ARG VITE_WALRUS_MAX_TIP_MIST
|
|
59
|
+
ARG VITE_PUBLIC_URL
|
|
60
|
+
|
|
61
|
+
ENV VITE_NETWORK=${VITE_NETWORK} \
|
|
62
|
+
VITE_FEE_TREASURY_TESTNET=${VITE_FEE_TREASURY_TESTNET} \
|
|
63
|
+
VITE_FEE_TREASURY_MAINNET=${VITE_FEE_TREASURY_MAINNET} \
|
|
64
|
+
VITE_FEE_MIST=${VITE_FEE_MIST} \
|
|
65
|
+
VITE_WALRUS_RELAY_TESTNET=${VITE_WALRUS_RELAY_TESTNET} \
|
|
66
|
+
VITE_WALRUS_RELAY_MAINNET=${VITE_WALRUS_RELAY_MAINNET} \
|
|
67
|
+
VITE_WALRUS_RPC_TESTNET=${VITE_WALRUS_RPC_TESTNET} \
|
|
68
|
+
VITE_WALRUS_RPC_MAINNET=${VITE_WALRUS_RPC_MAINNET} \
|
|
69
|
+
VITE_RPC_TESTNET=${VITE_RPC_TESTNET} \
|
|
70
|
+
VITE_RPC_MAINNET=${VITE_RPC_MAINNET} \
|
|
71
|
+
VITE_ACCESS_GATE_ID_TESTNET=${VITE_ACCESS_GATE_ID_TESTNET} \
|
|
72
|
+
VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${VITE_ACCESS_GATE_NFT_TYPE_TESTNET} \
|
|
73
|
+
VITE_ACCESS_GATE_SOULBOUND_TESTNET=${VITE_ACCESS_GATE_SOULBOUND_TESTNET} \
|
|
74
|
+
VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${VITE_ACCESS_GATE_PRICE_MIST_TESTNET} \
|
|
75
|
+
VITE_ACCESS_GATE_ID_MAINNET=${VITE_ACCESS_GATE_ID_MAINNET} \
|
|
76
|
+
VITE_ACCESS_GATE_NFT_TYPE_MAINNET=${VITE_ACCESS_GATE_NFT_TYPE_MAINNET} \
|
|
77
|
+
VITE_ACCESS_GATE_SOULBOUND_MAINNET=${VITE_ACCESS_GATE_SOULBOUND_MAINNET} \
|
|
78
|
+
VITE_ACCESS_GATE_PRICE_MIST_MAINNET=${VITE_ACCESS_GATE_PRICE_MIST_MAINNET} \
|
|
79
|
+
VITE_WALRUS_MAX_TIP_MIST=${VITE_WALRUS_MAX_TIP_MIST} \
|
|
80
|
+
VITE_PUBLIC_URL=${VITE_PUBLIC_URL}
|
|
81
|
+
|
|
82
|
+
RUN npm run build
|
|
83
|
+
|
|
84
|
+
# ── runtime stage ─────────────────────────────────────────────────────────────
|
|
85
|
+
# static-server is a minimal Go binary image — no shell, no package manager.
|
|
86
|
+
# SPA_FALLBACK serves index.html for any extensionless path (Vue Router history mode).
|
|
87
|
+
# CACHE_IMMUTABLE_PREFIX matches the /assets/ directory Vite emits with content hashes.
|
|
88
|
+
FROM quay.io/meddleware-org/static-server:0.1.1
|
|
89
|
+
|
|
90
|
+
COPY --from=build /app/dist /app/public
|
|
91
|
+
|
|
92
|
+
ENV SERVE_DIR=/app/public \
|
|
93
|
+
SPA_FALLBACK=true \
|
|
94
|
+
CACHE_IMMUTABLE_PREFIX=/assets/
|
|
95
|
+
|
|
96
|
+
EXPOSE 8080
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meddleware/token-deployer-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": { "default": "./src/index.ts" }
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@meddleware/wallet-adapter": "^0.0.7",
|
|
34
|
-
"@meddleware/walrus-relay": "^0.1.
|
|
34
|
+
"@meddleware/walrus-relay": "^0.1.16",
|
|
35
35
|
"@mysten/bcs": "~2.1.0",
|
|
36
36
|
"@mysten/move-bytecode-template": "~0.4.0",
|
|
37
37
|
"@mysten/sui": "^2.31.0",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"vue-tsc": "~3.3.0"
|
|
60
60
|
},
|
|
61
61
|
"optionalDependencies": {
|
|
62
|
-
"@meddleware/sui-token-template": "^1.0.
|
|
62
|
+
"@meddleware/sui-token-template": "^1.0.1"
|
|
63
63
|
},
|
|
64
64
|
"engines": {
|
|
65
65
|
"node": "^22.18.0 || >=24.12.0"
|
|
@@ -25,7 +25,7 @@ const files = {
|
|
|
25
25
|
'Move.toml': read('Move.toml'),
|
|
26
26
|
'source.move': read('sources/sui_token_template.move'),
|
|
27
27
|
'scripts/publish.sh': read('templates/publish.sh'),
|
|
28
|
-
'.gitignore': read('templates
|
|
28
|
+
'.gitignore': read('templates/gitignore'),
|
|
29
29
|
'README.md': read('templates/README.md'),
|
|
30
30
|
'deployments.md': read('templates/deployments.md'),
|
|
31
31
|
'CLAUDE.md': read('templates/CLAUDE.md'),
|
|
@@ -32,7 +32,7 @@ const SOURCE_OF: Record<string, string> = {
|
|
|
32
32
|
'Move.toml': 'Move.toml',
|
|
33
33
|
'source.move': 'sources/sui_token_template.move',
|
|
34
34
|
'scripts/publish.sh': 'templates/publish.sh',
|
|
35
|
-
'.gitignore': 'templates
|
|
35
|
+
'.gitignore': 'templates/gitignore',
|
|
36
36
|
'README.md': 'templates/README.md',
|
|
37
37
|
'deployments.md': 'templates/deployments.md',
|
|
38
38
|
'CLAUDE.md': 'templates/CLAUDE.md',
|
package/.env.production
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Committed defaults for the standalone SPA production build (auto-loaded by `vite build`).
|
|
2
|
-
# These are public Sui addresses — not secrets — so they are safe to commit.
|
|
3
|
-
# Override at deploy time via Cloudflare Pages environment variables (takes precedence).
|
|
4
|
-
# Local dev: copy .env.example to .env.local and edit there (never commit .env.local).
|
|
5
|
-
|
|
6
|
-
VITE_FEE_TREASURY_TESTNET=0xe6b2810abfc5a6f37a375f73e3ba76cfc37584196e453255ad3c9ca2f0ede0ed
|
|
7
|
-
VITE_FEE_TREASURY_MAINNET=0xe6b2810abfc5a6f37a375f73e3ba76cfc37584196e453255ad3c9ca2f0ede0ed
|