hostfn 0.1.1 → 0.1.3
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/dist/__tests__/core/backup.test.d.ts +2 -0
- package/dist/__tests__/core/backup.test.d.ts.map +1 -0
- package/dist/__tests__/core/backup.test.js +108 -0
- package/dist/__tests__/core/backup.test.js.map +1 -0
- package/dist/__tests__/core/health.test.d.ts +2 -0
- package/dist/__tests__/core/health.test.d.ts.map +1 -0
- package/dist/__tests__/core/health.test.js +97 -0
- package/dist/__tests__/core/health.test.js.map +1 -0
- package/dist/__tests__/core/lock.test.d.ts +2 -0
- package/dist/__tests__/core/lock.test.d.ts.map +1 -0
- package/dist/__tests__/core/lock.test.js +136 -0
- package/dist/__tests__/core/lock.test.js.map +1 -0
- package/dist/__tests__/core/nginx-multi-domain.test.d.ts +2 -0
- package/dist/__tests__/core/nginx-multi-domain.test.d.ts.map +1 -0
- package/dist/__tests__/core/nginx-multi-domain.test.js +158 -0
- package/dist/__tests__/core/nginx-multi-domain.test.js.map +1 -0
- package/dist/__tests__/runtimes/pm2.test.d.ts +2 -0
- package/dist/__tests__/runtimes/pm2.test.d.ts.map +1 -0
- package/dist/__tests__/runtimes/pm2.test.js +111 -0
- package/dist/__tests__/runtimes/pm2.test.js.map +1 -0
- package/dist/__tests__/utils/validation.test.d.ts +2 -0
- package/dist/__tests__/utils/validation.test.d.ts.map +1 -0
- package/dist/__tests__/utils/validation.test.js +136 -0
- package/dist/__tests__/utils/validation.test.js.map +1 -0
- package/dist/commands/deploy.d.ts +11 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +636 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/env.d.ts +21 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +317 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/expose.d.ts +6 -0
- package/dist/commands/expose.d.ts.map +1 -0
- package/dist/commands/expose.js +379 -0
- package/dist/commands/expose.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +175 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logs.d.ts +10 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +75 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/rollback.d.ts +6 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +113 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/server/info.d.ts +2 -0
- package/dist/commands/server/info.d.ts.map +1 -0
- package/dist/commands/server/info.js +104 -0
- package/dist/commands/server/info.js.map +1 -0
- package/dist/commands/server/setup.d.ts +11 -0
- package/dist/commands/server/setup.d.ts.map +1 -0
- package/dist/commands/server/setup.js +161 -0
- package/dist/commands/server/setup.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +120 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config/loader.d.ts +21 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +54 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +323 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +108 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/backup.d.ts +34 -0
- package/dist/core/backup.d.ts.map +1 -0
- package/dist/core/backup.js +95 -0
- package/dist/core/backup.js.map +1 -0
- package/dist/core/health.d.ts +31 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +78 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/local.d.ts +19 -0
- package/dist/core/local.d.ts.map +1 -0
- package/dist/core/local.js +50 -0
- package/dist/core/local.js.map +1 -0
- package/dist/core/lock.d.ts +28 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +89 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/nginx.d.ts +43 -0
- package/dist/core/nginx.d.ts.map +1 -0
- package/dist/core/nginx.js +131 -0
- package/dist/core/nginx.js.map +1 -0
- package/dist/core/ssh.d.ts +79 -0
- package/dist/core/ssh.d.ts.map +1 -0
- package/dist/core/ssh.js +264 -0
- package/dist/core/ssh.js.map +1 -0
- package/dist/core/sync.d.ts +25 -0
- package/dist/core/sync.d.ts.map +1 -0
- package/dist/core/sync.js +117 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/core/workspace.d.ts +13 -0
- package/dist/core/workspace.d.ts.map +1 -0
- package/dist/core/workspace.js +141 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +232 -0
- package/dist/index.js.map +1 -0
- package/dist/runtimes/base.d.ts +115 -0
- package/dist/runtimes/base.d.ts.map +1 -0
- package/dist/runtimes/base.js +16 -0
- package/dist/runtimes/base.js.map +1 -0
- package/dist/runtimes/nodejs/detector.d.ts +47 -0
- package/dist/runtimes/nodejs/detector.d.ts.map +1 -0
- package/dist/runtimes/nodejs/detector.js +143 -0
- package/dist/runtimes/nodejs/detector.js.map +1 -0
- package/dist/runtimes/nodejs/index.d.ts +14 -0
- package/dist/runtimes/nodejs/index.d.ts.map +1 -0
- package/dist/runtimes/nodejs/index.js +213 -0
- package/dist/runtimes/nodejs/index.js.map +1 -0
- package/dist/runtimes/nodejs/pm2.d.ts +17 -0
- package/dist/runtimes/nodejs/pm2.d.ts.map +1 -0
- package/dist/runtimes/nodejs/pm2.js +60 -0
- package/dist/runtimes/nodejs/pm2.js.map +1 -0
- package/dist/runtimes/registry.d.ts +34 -0
- package/dist/runtimes/registry.d.ts.map +1 -0
- package/dist/runtimes/registry.js +58 -0
- package/dist/runtimes/registry.js.map +1 -0
- package/dist/utils/logger.d.ts +47 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +76 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +32 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +125 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +33 -16
- package/LICENSE +0 -21
- package/README.md +0 -1136
- package/_conduct/specs/1.v0.spec.md +0 -1041
- package/examples/express-api/package.json +0 -22
- package/examples/express-api/src/index.ts +0 -16
- package/examples/express-api/tsconfig.json +0 -11
- package/examples/github-actions-deploy.yml +0 -40
- package/examples/monorepo-config.json +0 -76
- package/examples/monorepo-multi-server-config.json +0 -74
- package/packages/cli/package.json +0 -40
- package/turbo.json +0 -24
- /package/{packages/cli/src → src}/__tests__/core/backup.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/core/health.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/core/lock.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/core/nginx-multi-domain.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/runtimes/pm2.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/utils/validation.test.ts +0 -0
- /package/{packages/cli/src → src}/commands/deploy.ts +0 -0
- /package/{packages/cli/src → src}/commands/env.ts +0 -0
- /package/{packages/cli/src → src}/commands/expose.ts +0 -0
- /package/{packages/cli/src → src}/commands/init.ts +0 -0
- /package/{packages/cli/src → src}/commands/logs.ts +0 -0
- /package/{packages/cli/src → src}/commands/rollback.ts +0 -0
- /package/{packages/cli/src → src}/commands/server/info.ts +0 -0
- /package/{packages/cli/src → src}/commands/server/setup.ts +0 -0
- /package/{packages/cli/src → src}/commands/status.ts +0 -0
- /package/{packages/cli/src → src}/config/loader.ts +0 -0
- /package/{packages/cli/src → src}/config/schema.ts +0 -0
- /package/{packages/cli/src → src}/core/backup.ts +0 -0
- /package/{packages/cli/src → src}/core/health.ts +0 -0
- /package/{packages/cli/src → src}/core/local.ts +0 -0
- /package/{packages/cli/src → src}/core/lock.ts +0 -0
- /package/{packages/cli/src → src}/core/nginx.ts +0 -0
- /package/{packages/cli/src → src}/core/ssh.ts +0 -0
- /package/{packages/cli/src → src}/core/sync.ts +0 -0
- /package/{packages/cli/src → src}/core/workspace.ts +0 -0
- /package/{packages/cli/src → src}/index.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/base.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/nodejs/detector.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/nodejs/index.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/nodejs/pm2.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/registry.ts +0 -0
- /package/{packages/cli/src → src}/utils/logger.ts +0 -0
- /package/{packages/cli/src → src}/utils/validation.ts +0 -0
- /package/{packages/cli/tsconfig.json → tsconfig.json} +0 -0
- /package/{packages/cli/vitest.config.ts → vitest.config.ts} +0 -0
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "example-express-api",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"type": "module",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"dev": "tsx watch src/index.ts",
|
|
7
|
-
"build": "tsc",
|
|
8
|
-
"start": "node dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"express": "^4.18.0"
|
|
12
|
-
},
|
|
13
|
-
"devDependencies": {
|
|
14
|
-
"@types/express": "^4.17.0",
|
|
15
|
-
"@types/node": "^20.0.0",
|
|
16
|
-
"tsx": "^4.0.0",
|
|
17
|
-
"typescript": "^5.0.0"
|
|
18
|
-
},
|
|
19
|
-
"engines": {
|
|
20
|
-
"node": ">=18.0.0"
|
|
21
|
-
}
|
|
22
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import express from 'express';
|
|
2
|
-
|
|
3
|
-
const app = express();
|
|
4
|
-
const port = process.env.PORT || 3000;
|
|
5
|
-
|
|
6
|
-
app.get('/health', (req, res) => {
|
|
7
|
-
res.json({ status: 'ok' });
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
app.get('/', (req, res) => {
|
|
11
|
-
res.json({ message: 'Hello from Express API!' });
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
app.listen(port, () => {
|
|
15
|
-
console.log(`Server running on port ${port}`);
|
|
16
|
-
});
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
name: Deploy with hostfn
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
|
-
- production
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
deploy:
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
|
|
13
|
-
steps:
|
|
14
|
-
- name: Checkout code
|
|
15
|
-
uses: actions/checkout@v4
|
|
16
|
-
|
|
17
|
-
- name: Setup Node.js
|
|
18
|
-
uses: actions/setup-node@v4
|
|
19
|
-
with:
|
|
20
|
-
node-version: '20'
|
|
21
|
-
|
|
22
|
-
- name: Install hostfn
|
|
23
|
-
run: npm install -g hostfn
|
|
24
|
-
|
|
25
|
-
- name: Deploy to production
|
|
26
|
-
env:
|
|
27
|
-
HOSTFN_SSH_KEY: ${{ secrets.HOSTFN_SSH_KEY }}
|
|
28
|
-
HOSTFN_SSH_PASSPHRASE: ${{ secrets.HOSTFN_SSH_PASSPHRASE }}
|
|
29
|
-
run: hostfn deploy production --ci
|
|
30
|
-
|
|
31
|
-
deploy-selfhosted:
|
|
32
|
-
# This job runs on a self-hosted runner on the deployment server
|
|
33
|
-
runs-on: self-hosted
|
|
34
|
-
|
|
35
|
-
steps:
|
|
36
|
-
- name: Checkout code
|
|
37
|
-
uses: actions/checkout@v4
|
|
38
|
-
|
|
39
|
-
- name: Deploy locally (no SSH needed)
|
|
40
|
-
run: hostfn deploy production --local --ci
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "21n",
|
|
3
|
-
"runtime": "nodejs",
|
|
4
|
-
"version": "18",
|
|
5
|
-
"environments": {
|
|
6
|
-
"production": {
|
|
7
|
-
"server": "ubuntu@prod.example.com",
|
|
8
|
-
"port": 3000,
|
|
9
|
-
"instances": "max"
|
|
10
|
-
},
|
|
11
|
-
"staging": {
|
|
12
|
-
"server": "ubuntu@staging.example.com",
|
|
13
|
-
"port": 3000,
|
|
14
|
-
"instances": 2
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"build": {
|
|
18
|
-
"command": "npm run build",
|
|
19
|
-
"directory": "dist",
|
|
20
|
-
"nodeModules": "production"
|
|
21
|
-
},
|
|
22
|
-
"start": {
|
|
23
|
-
"command": "npm start",
|
|
24
|
-
"entry": "dist/index.js"
|
|
25
|
-
},
|
|
26
|
-
"services": {
|
|
27
|
-
"account": {
|
|
28
|
-
"port": 3001,
|
|
29
|
-
"path": "services/account",
|
|
30
|
-
"domain": "account.example.com",
|
|
31
|
-
"instances": "max"
|
|
32
|
-
},
|
|
33
|
-
"auth": {
|
|
34
|
-
"port": 3002,
|
|
35
|
-
"path": "services/auth",
|
|
36
|
-
"domain": "auth.example.com",
|
|
37
|
-
"instances": 2
|
|
38
|
-
},
|
|
39
|
-
"notification": {
|
|
40
|
-
"port": 3003,
|
|
41
|
-
"path": "services/notification",
|
|
42
|
-
"domain": "notification.example.com"
|
|
43
|
-
},
|
|
44
|
-
"analytics": {
|
|
45
|
-
"port": 3004,
|
|
46
|
-
"path": "services/analytics"
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
"health": {
|
|
50
|
-
"path": "/health",
|
|
51
|
-
"timeout": 60,
|
|
52
|
-
"retries": 10,
|
|
53
|
-
"interval": 3
|
|
54
|
-
},
|
|
55
|
-
"env": {
|
|
56
|
-
"required": ["NODE_ENV", "DATABASE_URL"],
|
|
57
|
-
"optional": ["REDIS_URL", "LOG_LEVEL"]
|
|
58
|
-
},
|
|
59
|
-
"sync": {
|
|
60
|
-
"exclude": [
|
|
61
|
-
"node_modules",
|
|
62
|
-
".git",
|
|
63
|
-
".github",
|
|
64
|
-
"dist",
|
|
65
|
-
"build",
|
|
66
|
-
".env",
|
|
67
|
-
".env.*",
|
|
68
|
-
"*.log",
|
|
69
|
-
".turbo",
|
|
70
|
-
".wrangler"
|
|
71
|
-
]
|
|
72
|
-
},
|
|
73
|
-
"backup": {
|
|
74
|
-
"keep": 5
|
|
75
|
-
}
|
|
76
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "21n",
|
|
3
|
-
"runtime": "nodejs",
|
|
4
|
-
"version": "18",
|
|
5
|
-
"environments": {
|
|
6
|
-
"production": {
|
|
7
|
-
"server": "ubuntu@shared.example.com",
|
|
8
|
-
"port": 3000,
|
|
9
|
-
"instances": "max"
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
"build": {
|
|
13
|
-
"command": "npm run build",
|
|
14
|
-
"directory": "dist",
|
|
15
|
-
"nodeModules": "production"
|
|
16
|
-
},
|
|
17
|
-
"start": {
|
|
18
|
-
"command": "npm start",
|
|
19
|
-
"entry": "dist/index.js"
|
|
20
|
-
},
|
|
21
|
-
"services": {
|
|
22
|
-
"account": {
|
|
23
|
-
"port": 3001,
|
|
24
|
-
"path": "services/account",
|
|
25
|
-
"domain": "account.example.com",
|
|
26
|
-
"server": "ubuntu@account-server.example.com",
|
|
27
|
-
"instances": "max"
|
|
28
|
-
},
|
|
29
|
-
"auth": {
|
|
30
|
-
"port": 3002,
|
|
31
|
-
"path": "services/auth",
|
|
32
|
-
"domain": "auth.example.com",
|
|
33
|
-
"server": "ubuntu@auth-server.example.com",
|
|
34
|
-
"instances": 4
|
|
35
|
-
},
|
|
36
|
-
"notification": {
|
|
37
|
-
"port": 3003,
|
|
38
|
-
"path": "services/notification",
|
|
39
|
-
"domain": "notification.example.com"
|
|
40
|
-
},
|
|
41
|
-
"analytics": {
|
|
42
|
-
"port": 3004,
|
|
43
|
-
"path": "services/analytics",
|
|
44
|
-
"server": "ubuntu@analytics-server.example.com"
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
"health": {
|
|
48
|
-
"path": "/health",
|
|
49
|
-
"timeout": 60,
|
|
50
|
-
"retries": 10,
|
|
51
|
-
"interval": 3
|
|
52
|
-
},
|
|
53
|
-
"env": {
|
|
54
|
-
"required": ["NODE_ENV", "DATABASE_URL"],
|
|
55
|
-
"optional": ["REDIS_URL", "LOG_LEVEL"]
|
|
56
|
-
},
|
|
57
|
-
"sync": {
|
|
58
|
-
"exclude": [
|
|
59
|
-
"node_modules",
|
|
60
|
-
".git",
|
|
61
|
-
".github",
|
|
62
|
-
"dist",
|
|
63
|
-
"build",
|
|
64
|
-
".env",
|
|
65
|
-
".env.*",
|
|
66
|
-
"*.log",
|
|
67
|
-
".turbo",
|
|
68
|
-
".wrangler"
|
|
69
|
-
]
|
|
70
|
-
},
|
|
71
|
-
"backup": {
|
|
72
|
-
"keep": 5
|
|
73
|
-
}
|
|
74
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "hostfn",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Universal application deployment CLI",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"hostfn": "./dist/index.js"
|
|
8
|
-
},
|
|
9
|
-
"scripts": {
|
|
10
|
-
"dev": "tsx watch src/index.ts",
|
|
11
|
-
"build": "tsc",
|
|
12
|
-
"clean": "rm -rf dist",
|
|
13
|
-
"lint": "tsc --noEmit",
|
|
14
|
-
"test": "vitest",
|
|
15
|
-
"test:watch": "vitest --watch",
|
|
16
|
-
"test:coverage": "vitest --coverage"
|
|
17
|
-
},
|
|
18
|
-
"dependencies": {
|
|
19
|
-
"commander": "^11.1.0",
|
|
20
|
-
"chalk": "^5.3.0",
|
|
21
|
-
"ora": "^7.0.1",
|
|
22
|
-
"inquirer": "^9.2.12",
|
|
23
|
-
"zod": "^3.22.4",
|
|
24
|
-
"ssh2": "^1.15.0",
|
|
25
|
-
"dotenv": "^16.3.1",
|
|
26
|
-
"execa": "^8.0.1"
|
|
27
|
-
},
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"@types/node": "^20.10.0",
|
|
30
|
-
"@types/ssh2": "^1.15.0",
|
|
31
|
-
"@types/inquirer": "^9.0.7",
|
|
32
|
-
"@vitest/coverage-v8": "^1.0.0",
|
|
33
|
-
"typescript": "^5.3.0",
|
|
34
|
-
"tsx": "^4.7.0",
|
|
35
|
-
"vitest": "^1.0.0"
|
|
36
|
-
},
|
|
37
|
-
"engines": {
|
|
38
|
-
"node": ">=18.0.0"
|
|
39
|
-
}
|
|
40
|
-
}
|
package/turbo.json
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://turbo.build/schema.json",
|
|
3
|
-
"globalDependencies": ["**/.env.*local"],
|
|
4
|
-
"pipeline": {
|
|
5
|
-
"build": {
|
|
6
|
-
"dependsOn": ["^build"],
|
|
7
|
-
"outputs": ["dist/**"]
|
|
8
|
-
},
|
|
9
|
-
"dev": {
|
|
10
|
-
"cache": false,
|
|
11
|
-
"persistent": true
|
|
12
|
-
},
|
|
13
|
-
"lint": {
|
|
14
|
-
"outputs": []
|
|
15
|
-
},
|
|
16
|
-
"test": {
|
|
17
|
-
"dependsOn": ["build"],
|
|
18
|
-
"outputs": []
|
|
19
|
-
},
|
|
20
|
-
"clean": {
|
|
21
|
-
"cache": false
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|