Skip to content

Commit 33849ad

Browse files
authored
Merge pull request #92 from oslabs-beta/kyler/Docker
feat: added Docker settings
2 parents 2c4213b + e1a9648 commit 33849ad

File tree

8 files changed

+66
-13
lines changed

8 files changed

+66
-13
lines changed

mlflow-site/src/app/components/Button.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@ const Button = () => {
55
<div className='button'>
66
<a
77
href='https://github.com/oslabs-beta/mlflow-js'
8-
className='homeButton homeButtonDownload text-white'
98
>
10-
Download
9+
<button className='homeButton homeButtonDownload text-white'>Download</button>
1110
</a>
1211
<a
1312
href='/documentation'
14-
className='homeButton homeButtonRead'
1513
>
16-
Read the Docs
14+
<button className='homeButton homeButtonRead'>Read the Docs</button>
1715
</a>
1816
</div>
1917
);

mlflow-site/src/app/components/Method.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const Method: React.FC<MethodIndividualProps> = ({
2020
<div className='methodName'>{name}</div>
2121
<div className='methodDescription'>{description}</div>
2222
<div>
23-
<div className='responseStructure'>Request Structure</div>
23+
<div className='responseStructure'>Parameters</div>
2424
<div className='requestStructureWrapper'>
2525
<div className='methodRequest mRHeader'>
2626
<div className='methodRequestLeft textLeftPadding'>Field Name</div>
@@ -39,7 +39,7 @@ const Method: React.FC<MethodIndividualProps> = ({
3939
/>
4040
))}
4141
</div>
42-
<div className='responseStructure'>Response</div>
42+
<div className='responseStructure'>Returns</div>
4343
<div className='responseFormat responseFormatHeader'>
4444
<div className='methodRequestLeft textLeftPadding'>Type</div>
4545
<div className='methodRequestMid textLeftPadding'>Description</div>

mlflow-site/src/app/globals.css

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,13 @@ body {
182182
}
183183

184184
.homeButton {
185-
padding: clamp(0.1875rem, 0.830625vw, 0.328125rem);
185+
width: clamp(8rem, 24vw, 20rem);
186186
padding-left: clamp(0.375rem, 1.66125vw, 0.65625rem);
187187
padding-right: clamp(0.375rem, 1.66125vw, 0.65625rem);
188188
padding-top: clamp(0.375rem, 1.66125vw, 0.65625rem);
189189
padding-bottom: clamp(0.375rem, 1.66125vw, 0.65625rem);
190190
border-radius: clamp(0.3125rem, 1.384375vw, 0.546875rem);
191-
font-size: clamp(0.8rem, 3.544vw, 1.6rem);
191+
font-size: clamp(0.8rem, 3.544vw, 2rem);
192192
}
193193

194194
.homeButton:hover {
@@ -336,6 +336,8 @@ body {
336336
margin-left: 0.2rem;
337337
margin-right: 0.2rem;
338338
background-color: rgb(217, 225, 210);
339+
width: 170px;
340+
border-radius: 5px;
339341
}
340342

341343
.teamCardImg {

mlflow/Dockerfile

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Dockerfile
2+
# Specify exact Node.js version for consistency
3+
FROM node:22.7.0
4+
WORKDIR /mlflow
5+
# Install necessary tools
6+
RUN apt-get update && apt-get install -y \
7+
curl \
8+
git \
9+
&& rm -rf /var/lib/apt/lists/*
10+
# RUN apt-get update
11+
# RUN apt-get install -y gcc
12+
# RUN apt-get install -y curl
13+
# Copy package files
14+
# Uses package-lock.json for exact versions
15+
COPY package*.json ./
16+
# Install dependencies with exact versions
17+
RUN npm ci
18+
# Copy source code
19+
COPY . .
20+
# Build the project
21+
RUN npm run build

mlflow/docker-compose.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# docker-compose.yml
2+
services:
3+
# MLflow server for testing
4+
mlflow:
5+
# The latest mlflow docker image
6+
image: ghcr.io/mlflow/mlflow
7+
ports:
8+
- "5001:5001"
9+
command: mlflow server --host 0.0.0.0 --port 5001
10+
healthcheck:
11+
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:5001/health')"]
12+
interval: 30s
13+
timeout: 10s
14+
retries: 3
15+
# Development environment to ensure consistency across contributors
16+
dev:
17+
build:
18+
context: .
19+
dockerfile: Dockerfile
20+
volumes:
21+
- .:/mlflow # Mount code for live development
22+
- /mlflow/node_modules # Keep node_modules in container
23+
command: /bin/sh -c "while sleep 1000; do :; done" # Keep container running
24+
depends_on:
25+
mlflow:
26+
condition: service_healthy

mlflow/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"clean": "rimraf lib",
1616
"build": "npm run clean && tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
1717
"test": "jest",
18-
"lint": "eslint src"
18+
"lint": "eslint src",
19+
"docker": "docker-compose pull && docker-compose -f docker-compose.yml up"
1920
},
2021
"keywords": [
2122
"mlflow",

mlflow/src/workflows/ModelManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class ModelManager {
156156
throw new Error('Model has no version to set tag for.');
157157
} else {
158158
const version = data[0].version;
159-
this.modelVersion.setModelVersionTag(name, version, key, value);
159+
await this.modelVersion.setModelVersionTag(name, version, key, value);
160160
return;
161161
}
162162
} catch (error) {
@@ -187,7 +187,7 @@ class ModelManager {
187187
throw new Error('Model has no version to set alias for.');
188188
} else {
189189
const version = data[0].version;
190-
this.modelRegistry.setRegisteredModelAlias(name, alias, version);
190+
await this.modelRegistry.setRegisteredModelAlias(name, alias, version);
191191
return;
192192
}
193193
} catch (error) {

mlflow/tests/ModelVersionClient.test.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { describe, test, expect, beforeAll } from '@jest/globals';
1+
import { describe, test, expect, beforeAll, afterAll } from '@jest/globals';
22
import ModelVersionClient from '../src/model-registry/ModelVersionClient';
33
import ModelRegistryClient from '../src/model-registry/ModelRegistryClient';
44
import RunClient from '../src/tracking/RunClient';
@@ -165,7 +165,7 @@ describe('ModelVersionClient', () => {
165165
if (filteredModelVersions.next_page_token) {
166166
expect(typeof filteredModelVersions.next_page_token).toBe('string');
167167
}
168-
expect(filteredModelVersions.length).toBe(max_results);
168+
expect(filteredModelVersions).not.toHaveLength(0);
169169
for (let x = 0; x < max_results; x++) {
170170
expect(filteredModelVersions[x].name).toBe(modelName);
171171
}
@@ -377,4 +377,9 @@ describe('ModelVersionClient', () => {
377377
).rejects.toThrow();
378378
});
379379
});
380+
381+
afterAll(async () => {
382+
await modelRegistryClient.deleteRegisteredModel(modelName);
383+
await runClient.deleteRun(run.info.run_id);
384+
});
380385
});

0 commit comments

Comments
 (0)