Skip to content

Commit 6c3dc17

Browse files
authored
Bygger backend med Webpack og tatt ibruk Node 20 LTS i Dockerfile (#1187)
* Bruker webpack til å bygge backend del av app og tar ubruk node 20 i Dockerfile * Rydder i workflows
1 parent 6dafa1f commit 6c3dc17

8 files changed

+81
-74
lines changed

.github/workflows/build_n_deploy_dev.yaml

+8-18
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,29 @@ jobs:
1414
- uses: actions/checkout@v4
1515
- uses: actions/setup-node@v4
1616
with:
17-
node-version: '18'
17+
node-version: '20'
1818
registry-url: "https://npm.pkg.github.com"
19-
- name: Installer node-pakker
2019
env:
2120
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
21+
- name: Installer node-pakker
2222
run: yarn --prefer-offline --frozen-lockfile
2323
- name: Kjør typecheck
24-
env:
25-
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
2624
run: yarn typecheck
2725
- name: Kjør tester
28-
env:
29-
CI: true
30-
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
3126
run: yarn test
3227

3328
bygg:
3429
name: Bygg app/image og push til GitHub
3530
runs-on: ubuntu-latest
3631
permissions:
37-
contents: "read"
38-
id-token: "write"
32+
contents: read
33+
id-token: write
3934
steps:
4035
- name: Checkout
4136
uses: actions/checkout@v4
4237
- uses: actions/setup-node@v4
4338
with:
44-
node-version: "18"
39+
node-version: "20"
4540
registry-url: "https://npm.pkg.github.com"
4641
- name: Yarn install
4742
env:
@@ -57,28 +52,23 @@ jobs:
5752
id: docker-push
5853
with:
5954
team: teamfamilie
60-
push_image: true
61-
dockerfile: Dockerfile
62-
docker_context: .
6355
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}
6456
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
65-
outputs:
66-
image: ${{ steps.docker-push.outputs.image }}
57+
6758
deploy:
6859
name: Deploy til dev-gcp
6960
needs:
7061
- bygg
7162
- test
7263
runs-on: ubuntu-latest
7364
permissions:
74-
contents: "read"
75-
id-token: "write"
65+
contents: read
66+
id-token: write
7667
steps:
7768
- uses: actions/checkout@v4
7869
- name: Deploy til dev-gcp team namespace
7970
uses: nais/deploy/actions/deploy@v2
8071
env:
81-
APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }}
8272
CLUSTER: dev-gcp
8373
RESOURCE: build_n_deploy/naiserator/naiserator_dev.yaml
8474
VAR: base_path=${{ env.BASE_PATH }}

.github/workflows/build_n_deploy_prod.yaml

+9-21
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,29 @@ jobs:
1919
- uses: actions/checkout@v4
2020
- uses: actions/setup-node@v4
2121
with:
22-
node-version: '18'
22+
node-version: '20'
2323
registry-url: "https://npm.pkg.github.com"
24-
- name: Installer node-pakker
2524
env:
2625
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
26+
- name: Installer node-pakker
2727
run: yarn --prefer-offline --frozen-lockfile
2828
- name: Kjør typecheck
29-
env:
30-
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
3129
run: yarn typecheck
3230
- name: Kjør tester
33-
env:
34-
CI: true
35-
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
3631
run: yarn test
3732

3833
bygg:
3934
name: Bygg app/image og push til GitHub
4035
runs-on: ubuntu-latest
4136
permissions:
42-
contents: "read"
43-
id-token: "write"
37+
contents: read
38+
id-token: write
4439
steps:
4540
- name: Checkout
4641
uses: actions/checkout@v4
4742
- uses: actions/setup-node@v4
4843
with:
49-
node-version: "18"
44+
node-version: "20"
5045
registry-url: "https://npm.pkg.github.com"
5146
- name: Yarn install
5247
env:
@@ -62,13 +57,8 @@ jobs:
6257
id: docker-push
6358
with:
6459
team: teamfamilie
65-
push_image: true
66-
dockerfile: Dockerfile
67-
docker_context: .
6860
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}
6961
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
70-
outputs:
71-
image: ${{ steps.docker-push.outputs.image }}
7262

7363
deploy-preprod:
7464
name: Deploy til dev-gcp
@@ -77,14 +67,13 @@ jobs:
7767
- test
7868
runs-on: ubuntu-latest
7969
permissions:
80-
contents: "read"
81-
id-token: "write"
70+
contents: read
71+
id-token: write
8272
steps:
8373
- uses: actions/checkout@v4
8474
- name: Deploy til dev-gcp team namespace
8575
uses: nais/deploy/actions/deploy@v2
8676
env:
87-
APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }}
8877
CLUSTER: dev-gcp
8978
RESOURCE: build_n_deploy/naiserator/naiserator_dev.yaml
9079
VAR: base_path=${{ env.BASE_PATH }}
@@ -97,14 +86,13 @@ jobs:
9786
- test
9887
runs-on: ubuntu-latest
9988
permissions:
100-
contents: "read"
101-
id-token: "write"
89+
contents: read
90+
id-token: write
10291
steps:
10392
- uses: actions/checkout@v4
10493
- name: Deploy til prod-gcp team namespace
10594
uses: nais/deploy/actions/deploy@v2
10695
env:
107-
APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }}
10896
CLUSTER: prod-gcp
10997
RESOURCE: build_n_deploy/naiserator/naiserator_prod.yaml
11098
VAR: base_path=${{ env.BASE_PATH }}

.github/workflows/build_pr.yaml

+5-12
Original file line numberDiff line numberDiff line change
@@ -16,38 +16,31 @@ jobs:
1616
- uses: actions/checkout@v4
1717
- uses: actions/setup-node@v4
1818
with:
19-
node-version: '18'
19+
node-version: '20'
2020
registry-url: "https://npm.pkg.github.com"
21-
- name: Installer node-pakker
2221
env:
2322
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
23+
- name: Installer node-pakker
2424
run: yarn --prefer-offline --frozen-lockfile
2525
- name: Kjør typecheck
26-
env:
27-
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
2826
run: yarn typecheck
2927
- name: Kjør prettier og eslint
30-
env:
31-
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
3228
run: yarn lint-test
3329
- name: Kjør tester
34-
env:
35-
CI: true
36-
NODE_AUTH_TOKEN: ${{ secrets.READER_TOKEN }}
3730
run: yarn test
3831

3932
bygg:
4033
name: Bygg app
4134
runs-on: ubuntu-latest
4235
permissions:
43-
contents: "read"
44-
id-token: "write"
36+
contents: read
37+
id-token: write
4538
steps:
4639
- name: Checkout
4740
uses: actions/checkout@v4
4841
- uses: actions/setup-node@v4
4942
with:
50-
node-version: "18"
43+
node-version: "20"
5144
registry-url: "https://npm.pkg.github.com"
5245
- name: Yarn install
5346
env:

Dockerfile

+3-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
1-
FROM gcr.io/distroless/nodejs:18
2-
USER root
3-
USER apprunner
1+
FROM gcr.io/distroless/nodejs20-debian12:nonroot
42

5-
WORKDIR /var/server
3+
WORKDIR /app
64

7-
COPY build ./build
85
COPY dist ./dist
96

10-
# Må kopiere package.json og node_modules for at backend skal fungere. Backend henter avhengigheter runtime fra node_modules, og package.json trengs for at 'import' statements skal fungere.
11-
COPY node_modules ./node_modules
12-
COPY package.json .
13-
14-
CMD ["--es-module-specifier-resolution=node", "build/backend/server.js"]
7+
CMD ["dist/server.cjs"]

package.json

+8-11
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,17 @@
66
"prettier": "prettier -l \"src/**/*.{js,jsx,ts,tsx}\"",
77
"eslint": "eslint src/",
88
"lint-test": "yarn prettier && yarn eslint",
9-
"build_and_serve": "yarn build; yarn start",
10-
"start:dev": "yarn clean && BASE_PATH=/barnetrygd/soknad/ concurrently \"npm:dev:*\"",
11-
"start:dev:ts-server": "yarn clean && BASE_PATH=/barnetrygd/soknad/ concurrently --restart-tries \"-1\" \"npm:dev:webpack\" \"npm:ts:server\"",
12-
"dev:server": "yarn build:backend && NODE_ENV=development node --es-module-specifier-resolution=node build/backend/server.js",
13-
"ts:server": "NODE_ENV=development TS_NODE_PROJECT=tsconfig.backend.json nodemon --exec 'node' --watch src/backend --watch src/shared-utils -e ts --es-module-specifier-resolution=node --loader ts-node/esm src/backend/server.ts",
14-
"dev:webpack": "TS_NODE_PROJECT=src/webpack/tsconfig.json NODE_ENV=development node --loader ts-node/esm --es-module-specifier-resolution=node node_modules/.bin/webpack-cli serve -c src/webpack/webpack.development.config.ts",
9+
"start:dev": "yarn clean && BASE_PATH=/barnetrygd/soknad/ concurrently \"yarn:dev:*\"",
10+
"dev:server": "yarn build:backend:dev && node dist/server.cjs",
11+
"dev:webpack": "yarn set-node-options TS_NODE_PROJECT=src/webpack/tsconfig.json NODE_ENV=development webpack serve -c src/webpack/webpack.development.config.ts",
1512
"build": "concurrently npm:build:frontend npm:build:backend",
16-
"build:frontend": "TS_NODE_PROJECT=src/webpack/tsconfig.json NODE_ENV=production node --loader ts-node/esm --es-module-specifier-resolution=node node_modules/.bin/webpack-cli --config src/webpack/webpack.production.config.ts",
17-
"build:backend": "tsc -p tsconfig.backend.json",
18-
"build:analysis": "TS_NODE_PROJECT=src/webpack/tsconfig.json NODE_ENV=production node --loader ts-node/esm --es-module-specifier-resolution=node node_modules/.bin/webpack-cli --config src/webpack/webpack.analysis.config.ts",
13+
"build:frontend": "yarn set-node-options TS_NODE_PROJECT=src/webpack/tsconfig.json NODE_ENV=production webpack -c src/webpack/webpack.production.config.ts",
14+
"build:backend": "yarn set-node-options TS_NODE_PROJECT=src/backend/tsconfig.json NODE_ENV=production webpack -c src/backend/webpack.config.ts",
15+
"build:backend:dev": "yarn set-node-options TS_NODE_PROJECT=src/backend/tsconfig.json NODE_ENV=development webpack -c src/backend/webpack.config.ts",
16+
"set-node-options": "NODE_OPTIONS='--import=./registerESMLoader.js --es-module-specifier-resolution=node'",
1917
"test-ci": "CI=true build",
2018
"test": "jest",
21-
"start": "NODE_ENV=production node --es-module-specifier-resolution=node build/backend/server.js",
22-
"clean": "rm -rf dist build",
19+
"clean": "rm -rf dist",
2320
"typecheck": "tsc --noEmit -p src/frontend/tsconfig.json",
2421
"texts:find-unused": "python3 src/scripts/finn-ubrukte-språktekster.py",
2522
"texts:find-missing": "node src/scripts/find-missing-text-ids.js",

registerESMLoader.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Fjerner warningen: 'ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`'
2+
3+
import { register } from 'node:module';
4+
import { pathToFileURL } from 'node:url';
5+
6+
register('ts-node/esm', pathToFileURL('./'));

src/backend/tsconfig.json

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
{
2-
"extends": "../../tsconfig.backend.json"
3-
}
2+
"compilerOptions": {
3+
"resolveJsonModule": true,
4+
"noImplicitAny": false,
5+
"allowSyntheticDefaultImports": true,
6+
"esModuleInterop": true,
7+
"target": "ES6",
8+
"module": "ESNext",
9+
"moduleResolution": "Node",
10+
},
11+
}

src/backend/webpack.config.ts

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import path from 'path';
2+
3+
import { Configuration } from 'webpack';
4+
5+
const serverConfig: Configuration = {
6+
entry: './src/backend/server.ts',
7+
target: 'node',
8+
module: {
9+
rules: [
10+
{
11+
test: /\.(jsx|tsx|ts|js)?$/,
12+
use: 'ts-loader',
13+
exclude: /node_modules/,
14+
},
15+
{
16+
test: /\.m?js$/,
17+
resolve: {
18+
fullySpecified: false,
19+
},
20+
},
21+
],
22+
},
23+
resolve: {
24+
extensions: ['.tsx', '.ts', '.js'],
25+
},
26+
output: {
27+
filename: 'server.cjs',
28+
path: path.resolve(process.cwd(), 'dist'),
29+
},
30+
};
31+
32+
export default serverConfig;

0 commit comments

Comments
 (0)