tangled
alpha
login
or
join now
linkat.blue
/
linkat
6
fork
atom
Create your Link in Bio for Bluesky
6
fork
atom
overview
issues
pulls
pipelines
fly.io用設定削除
mkizka.dev
1 year ago
68a76905
d11234a8
+55
-181
7 changed files
expand all
collapse all
unified
split
.dockerignore
.github
workflows
test-and-deploy.yml
test.yml
Dockerfile
fly.toml
package.json
pnpm-lock.yaml
-3
.dockerignore
···
14
14
# playwright
15
15
playwright-report/
16
16
e2e/state.json
17
17
-
18
18
-
# fly.io
19
19
-
fly.toml
-89
.github/workflows/test-and-deploy.yml
···
1
1
-
name: Test and Deploy
2
2
-
3
3
-
on:
4
4
-
push:
5
5
-
branches:
6
6
-
- main
7
7
-
pull_request:
8
8
-
9
9
-
jobs:
10
10
-
unit-test:
11
11
-
runs-on: ubuntu-latest
12
12
-
steps:
13
13
-
- uses: actions/checkout@v4
14
14
-
- run: corepack enable pnpm
15
15
-
- uses: actions/setup-node@v4
16
16
-
with:
17
17
-
node-version-file: .tool-versions
18
18
-
cache: pnpm
19
19
-
- run: pnpm i
20
20
-
- run: pnpm typecheck
21
21
-
- run: pnpm lint
22
22
-
- run: pnpm test -- --coverage
23
23
-
e2e-test:
24
24
-
runs-on: ubuntu-latest
25
25
-
steps:
26
26
-
- uses: actions/checkout@v4
27
27
-
- run: corepack enable pnpm
28
28
-
- uses: actions/setup-node@v4
29
29
-
with:
30
30
-
node-version-file: .tool-versions
31
31
-
cache: pnpm
32
32
-
- run: |
33
33
-
ATPROTO_COMMIT=$(cat ./scripts/postinstall.sh | grep ATPROTO_COMMIT= | awk -F'=' '{print $2}')
34
34
-
echo "ATPROTO_COMMIT=$ATPROTO_COMMIT" >> $GITHUB_ENV
35
35
-
- uses: actions/cache@v4
36
36
-
with:
37
37
-
path: atproto
38
38
-
key: atproto-${{ env.ATPROTO_COMMIT }}
39
39
-
- run: pnpm i
40
40
-
- run: pnpm playwright install --with-deps
41
41
-
- run: cp .env.example .env
42
42
-
- run: pnpm setup-dev
43
43
-
- run: pnpm build
44
44
-
- run: pnpm e2e
45
45
-
- name: Upload Report
46
46
-
if: always()
47
47
-
run: |
48
48
-
E2E_S3_PATH="playwright-report/${{ github.ref == 'refs/heads/main' && 'main' || github.sha }}"
49
49
-
aws s3 cp playwright-report "s3://$E2E_S3_PATH" --recursive
50
50
-
echo "Report: https://${{ vars.S3_BASE_URL }}/$E2E_S3_PATH/index.html"
51
51
-
env:
52
52
-
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
53
53
-
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
54
54
-
AWS_ENDPOINT_URL: ${{ secrets.AWS_ENDPOINT_URL }}
55
55
-
AWS_DEFAULT_REGION: auto
56
56
-
upload-assets:
57
57
-
runs-on: ubuntu-latest
58
58
-
if: github.ref == 'refs/heads/main'
59
59
-
steps:
60
60
-
- uses: actions/checkout@v4
61
61
-
- run: corepack enable pnpm
62
62
-
- uses: actions/setup-node@v4
63
63
-
with:
64
64
-
node-version-file: .tool-versions
65
65
-
cache: pnpm
66
66
-
- run: pnpm i
67
67
-
- run: pnpm build
68
68
-
env:
69
69
-
VITE_CONFIG_BASE: ${{ vars.S3_BASE_URL }}/build/${{ github.run_number }}/
70
70
-
- name: Upload Assets
71
71
-
run: |
72
72
-
aws s3 cp build/client/assets "s3://build/${{ github.run_number }}/assets" --recursive
73
73
-
env:
74
74
-
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
75
75
-
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
76
76
-
AWS_ENDPOINT_URL: ${{ secrets.AWS_ENDPOINT_URL }}
77
77
-
AWS_DEFAULT_REGION: auto
78
78
-
deploy:
79
79
-
runs-on: ubuntu-latest
80
80
-
needs: [unit-test, e2e-test, upload-assets]
81
81
-
if: github.ref == 'refs/heads/main'
82
82
-
concurrency: deploy-group
83
83
-
timeout-minutes: 10
84
84
-
steps:
85
85
-
- uses: actions/checkout@v4
86
86
-
- uses: superfly/flyctl-actions/setup-flyctl@master
87
87
-
- run: flyctl deploy --remote-only --build-arg VITE_CONFIG_BASE=${{ vars.S3_BASE_URL }}/build/${{ github.run_number }}/
88
88
-
env:
89
89
-
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
+55
.github/workflows/test.yml
···
1
1
+
name: Test
2
2
+
3
3
+
on:
4
4
+
push:
5
5
+
branches:
6
6
+
- main
7
7
+
pull_request:
8
8
+
9
9
+
jobs:
10
10
+
unit-test:
11
11
+
runs-on: ubuntu-latest
12
12
+
steps:
13
13
+
- uses: actions/checkout@v4
14
14
+
- run: corepack enable pnpm
15
15
+
- uses: actions/setup-node@v4
16
16
+
with:
17
17
+
node-version-file: .tool-versions
18
18
+
cache: pnpm
19
19
+
- run: pnpm i
20
20
+
- run: pnpm typecheck
21
21
+
- run: pnpm lint
22
22
+
- run: pnpm test -- --coverage
23
23
+
e2e-test:
24
24
+
runs-on: ubuntu-latest
25
25
+
steps:
26
26
+
- uses: actions/checkout@v4
27
27
+
- run: corepack enable pnpm
28
28
+
- uses: actions/setup-node@v4
29
29
+
with:
30
30
+
node-version-file: .tool-versions
31
31
+
cache: pnpm
32
32
+
- run: |
33
33
+
ATPROTO_COMMIT=$(cat ./scripts/postinstall.sh | grep ATPROTO_COMMIT= | awk -F'=' '{print $2}')
34
34
+
echo "ATPROTO_COMMIT=$ATPROTO_COMMIT" >> $GITHUB_ENV
35
35
+
- uses: actions/cache@v4
36
36
+
with:
37
37
+
path: atproto
38
38
+
key: atproto-${{ env.ATPROTO_COMMIT }}
39
39
+
- run: pnpm i
40
40
+
- run: pnpm playwright install --with-deps
41
41
+
- run: cp .env.example .env
42
42
+
- run: pnpm setup-dev
43
43
+
- run: pnpm build
44
44
+
- run: pnpm e2e
45
45
+
- name: Upload Report
46
46
+
if: always()
47
47
+
run: |
48
48
+
E2E_S3_PATH="playwright-report/${{ github.ref == 'refs/heads/main' && 'main' || github.sha }}"
49
49
+
aws s3 cp playwright-report "s3://$E2E_S3_PATH" --recursive
50
50
+
echo "Report: https://${{ vars.S3_BASE_URL }}/$E2E_S3_PATH/index.html"
51
51
+
env:
52
52
+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
53
53
+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
54
54
+
AWS_ENDPOINT_URL: ${{ secrets.AWS_ENDPOINT_URL }}
55
55
+
AWS_DEFAULT_REGION: auto
-1
Dockerfile
···
1
1
# syntax = docker/dockerfile:1
2
2
FROM node:20.13-slim AS base
3
3
-
LABEL fly_launch_runtime="Remix/Prisma"
4
3
WORKDIR /app
5
4
RUN apt-get update -qq && \
6
5
apt-get install --no-install-recommends -y openssl && \
-32
fly.toml
···
1
1
-
# fly.toml app configuration file generated for linkat on 2024-09-03T00:58:29+09:00
2
2
-
#
3
3
-
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
4
4
-
#
5
5
-
6
6
-
app = 'linkat'
7
7
-
primary_region = 'nrt'
8
8
-
9
9
-
[build]
10
10
-
11
11
-
[deploy]
12
12
-
release_command = 'npx prisma db push --skip-generate'
13
13
-
strategy = 'bluegreen'
14
14
-
15
15
-
[http_service]
16
16
-
internal_port = 3000
17
17
-
force_https = true
18
18
-
auto_stop_machines = 'suspend'
19
19
-
auto_start_machines = true
20
20
-
min_machines_running = 1
21
21
-
processes = ['app']
22
22
-
23
23
-
[[http_service.checks]]
24
24
-
interval = '2s'
25
25
-
timeout = '2s'
26
26
-
grace_period = '5s'
27
27
-
method = 'GET'
28
28
-
path = '/health'
29
29
-
30
30
-
[[vm]]
31
31
-
size = 'shared-cpu-1x'
32
32
-
memory = "512mb"
-1
package.json
···
75
75
},
76
76
"devDependencies": {
77
77
"@atproto/lex-cli": "0.5.2",
78
78
-
"@flydotio/dockerfile": "0.5.9",
79
78
"@mkizka/eslint-config": "5.3.4",
80
79
"@mkizka/eslint-plugin-aaa": "1.0.2",
81
80
"@playwright/test": "1.49.0",
-55
pnpm-lock.yaml
···
150
150
'@atproto/lex-cli':
151
151
specifier: 0.5.2
152
152
version: 0.5.2
153
153
-
'@flydotio/dockerfile':
154
154
-
specifier: 0.5.9
155
155
-
version: 0.5.9
156
153
'@mkizka/eslint-config':
157
154
specifier: 5.3.4
158
155
version: 5.3.4(@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.15.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.15.0(jiti@1.21.6))(tailwindcss@3.4.15)(typescript@5.7.2)
···
1142
1139
resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==}
1143
1140
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1144
1141
1145
1145
-
'@flydotio/dockerfile@0.5.9':
1146
1146
-
resolution: {integrity: sha512-ZPvMw9ABrE6W4nc92NL5Jy4XdAehldsU4LZ6pJP+H0sAqHqw3Bk9qKbMcjKJN1aM5AuKqfWm/I4ABGnkDjcqEw==}
1147
1147
-
engines: {node: '>=16.0.0'}
1148
1148
-
hasBin: true
1149
1149
-
1150
1142
'@hapi/hoek@9.3.0':
1151
1143
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
1152
1144
···
2052
2044
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
2053
2045
engines: {node: '>=12'}
2054
2046
2055
2055
-
async@3.2.6:
2056
2056
-
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
2057
2057
-
2058
2047
asynckit@0.4.0:
2059
2048
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
2060
2049
···
2508
2497
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
2509
2498
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2510
2499
2511
2511
-
diff@5.2.0:
2512
2512
-
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
2513
2513
-
engines: {node: '>=0.3.1'}
2514
2514
-
2515
2500
dlv@1.1.3:
2516
2501
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
2517
2502
···
2527
2512
2528
2513
ee-first@1.1.1:
2529
2514
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
2530
2530
-
2531
2531
-
ejs@3.1.10:
2532
2532
-
resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
2533
2533
-
engines: {node: '>=0.10.0'}
2534
2534
-
hasBin: true
2535
2515
2536
2516
electron-to-chromium@1.5.65:
2537
2517
resolution: {integrity: sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==}
···
2817
2797
file-entry-cache@8.0.0:
2818
2798
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
2819
2799
engines: {node: '>=16.0.0'}
2820
2820
-
2821
2821
-
filelist@1.0.4:
2822
2822
-
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
2823
2800
2824
2801
fill-range@7.1.1:
2825
2802
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
···
3333
3310
3334
3311
jackspeak@3.4.3:
3335
3312
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
3336
3336
-
3337
3337
-
jake@10.9.2:
3338
3338
-
resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
3339
3339
-
engines: {node: '>=10'}
3340
3340
-
hasBin: true
3341
3313
3342
3314
jest-changed-files@29.7.0:
3343
3315
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
···
6089
6061
dependencies:
6090
6062
levn: 0.4.1
6091
6063
6092
6092
-
'@flydotio/dockerfile@0.5.9':
6093
6093
-
dependencies:
6094
6094
-
chalk: 5.3.0
6095
6095
-
diff: 5.2.0
6096
6096
-
ejs: 3.1.10
6097
6097
-
shell-quote: 1.8.1
6098
6098
-
yargs: 17.7.2
6099
6099
-
6100
6064
'@hapi/hoek@9.3.0': {}
6101
6065
6102
6066
'@hapi/topo@5.1.0':
···
7227
7191
7228
7192
assertion-error@2.0.1: {}
7229
7193
7230
7230
-
async@3.2.6: {}
7231
7231
-
7232
7194
asynckit@0.4.0: {}
7233
7195
7234
7196
atomic-sleep@1.0.0: {}
···
7705
7667
7706
7668
diff-sequences@29.6.3: {}
7707
7669
7708
7708
-
diff@5.2.0: {}
7709
7709
-
7710
7670
dlv@1.1.3: {}
7711
7671
7712
7672
doctrine@2.1.0:
···
7724
7684
7725
7685
ee-first@1.1.1: {}
7726
7686
7727
7727
-
ejs@3.1.10:
7728
7728
-
dependencies:
7729
7729
-
jake: 10.9.2
7730
7730
-
7731
7687
electron-to-chromium@1.5.65: {}
7732
7688
7733
7689
emittery@0.13.1: {}
···
8184
8140
file-entry-cache@8.0.0:
8185
8141
dependencies:
8186
8142
flat-cache: 4.0.1
8187
8187
-
8188
8188
-
filelist@1.0.4:
8189
8189
-
dependencies:
8190
8190
-
minimatch: 5.1.6
8191
8143
8192
8144
fill-range@7.1.1:
8193
8145
dependencies:
···
8691
8643
'@isaacs/cliui': 8.0.2
8692
8644
optionalDependencies:
8693
8645
'@pkgjs/parseargs': 0.11.0
8694
8694
-
8695
8695
-
jake@10.9.2:
8696
8696
-
dependencies:
8697
8697
-
async: 3.2.6
8698
8698
-
chalk: 4.1.2
8699
8699
-
filelist: 1.0.4
8700
8700
-
minimatch: 3.1.2
8701
8646
8702
8647
jest-changed-files@29.7.0:
8703
8648
dependencies: