Skip to content

Commit

Permalink
WIP test pending
Browse files Browse the repository at this point in the history
  • Loading branch information
fushar committed Oct 28, 2023
1 parent d7e7303 commit 4cb1ea5
Show file tree
Hide file tree
Showing 10 changed files with 81 additions and 162 deletions.
141 changes: 5 additions & 136 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,92 +3,13 @@ name: ci
on:
push:
branches:
- '*'
- "*"
pull_request:
branches:
- master

jobs:
test:
runs-on: ubuntu-22.04
services:
rabbitmq:
image: rabbitmq
ports:
- 5672:5672
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 50

- id: changed-files
name: Check changed files
run: python3 ci/check-changed-files.py | bash

- name: Set up JDK
if: steps.changed-files.outputs.gradle == '1'
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '11'
cache: 'gradle'

- name: Test judgels-commons
if: steps.changed-files.outputs.judgels-commons == '1'
run: ./judgels-backends/gradlew -p judgels-backends/judgels-commons check

- name: Test judgels-grader-api
if: steps.changed-files.outputs.judgels-grader == '1'
run: ./judgels-backends/gradlew -p judgels-backends/judgels-grader-api check

- name: Test judgels-grader-engines
if: steps.changed-files.outputs.judgels-grader == '1'
run: ./judgels-backends/gradlew -p judgels-backends/judgels-grader-engines check

- name: Test judgels-grader-app
if: steps.changed-files.outputs.judgels-grader == '1'
run: ./judgels-backends/gradlew -p judgels-backends/judgels-grader-app check

- name: Test judgels-server-api
if: steps.changed-files.outputs.judgels-server == '1'
run: ./judgels-backends/gradlew -p judgels-backends/judgels-server-api check

- name: Test judgels-server-app
if: steps.changed-files.outputs.judgels-server == '1'
run: ./judgels-backends/gradlew -p judgels-backends/judgels-server-app check

- name: Set up node
if: steps.changed-files.outputs.yarn == '1'
uses: actions/setup-node@v3
with:
node-version: '16'

- name: Get yarn cache directory path
if: steps.changed-files.outputs.yarn == '1'
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT

- name: Use yarn cache
if: steps.changed-files.outputs.yarn == '1'
uses: actions/cache@v3
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Test judgels-client
if: steps.changed-files.outputs.judgels-client == '1'
run: |
cd judgels-client
export NODE_OPTIONS="--max-old-space-size=4096"
yarn install
yarn ci
build:
needs: test
if: github.ref == 'refs/heads/master' && github.repository_owner == 'ia-toki'
runs-on: ubuntu-22.04
env:
CONTAINER_REGISTRY_USERNAME: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
Expand All @@ -111,15 +32,15 @@ jobs:
if: steps.changed-files.outputs.gradle == '1'
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '11'
cache: 'gradle'
distribution: "zulu"
java-version: "11"
cache: "gradle"

- name: Set up node
if: steps.changed-files.outputs.yarn == '1'
uses: actions/setup-node@v3
with:
node-version: '16'
node-version: "16"

- name: Get yarn cache directory path
if: steps.changed-files.outputs.yarn == '1'
Expand All @@ -144,53 +65,8 @@ jobs:
if: steps.changed-files.outputs.judgels-client == '1'
run: ./deployment/scripts/build_judgels_client.sh

- name: Build judgels-grader
if: steps.changed-files.outputs.judgels-grader == '1'
run: ./deployment/scripts/build_judgels_grader.sh

deploy-web:
if: github.ref == 'refs/heads/master' && github.repository_owner == 'ia-toki'
runs-on: ubuntu-22.04
env:
WEB_HOST: ${{ secrets.WEB_HOST }}
WEB_KNOWN_HOSTS: ${{ secrets.WEB_KNOWN_HOSTS }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 50

- id: changed-files
name: Check changed files
run: python3 ci/check-changed-files.py | bash

- name: Set up node
if: steps.changed-files.outputs.web == '1'
uses: actions/setup-node@v3
with:
node-version: '16'

- name: Build web
if: steps.changed-files.outputs.web == '1'
run: |
cd web
yarn install
yarn build
- name: Install SSH key
if: steps.changed-files.outputs.web == '1'
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.WEB_PRIVATE_KEY }}
known_hosts: ${{ secrets.WEB_KNOWN_HOSTS }}

- name: Rsync web
if: steps.changed-files.outputs.web == '1'
run: rsync -avzh web/build/ root@${WEB_HOST}:/var/www/html/judgels --delete

deploy-tlx-staging:
needs: build
if: github.ref == 'refs/heads/master' && github.repository_owner == 'ia-toki'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
Expand Down Expand Up @@ -224,10 +100,3 @@ jobs:
eval "$(ssh-agent -s)"
ssh-add deployment/ansible/env/deployment_rsa
./deployment/scripts/deploy_judgels_client.sh
- name: Deploy judgels-grader
if: steps.changed-files.outputs.judgels-grader == '1'
run: |
eval "$(ssh-agent -s)"
ssh-add deployment/ansible/env/deployment_rsa
./deployment/scripts/deploy_judgels_grader.sh
2 changes: 1 addition & 1 deletion deployment/scripts/build_judgels_client.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ rm -rf dist/build && mv build dist/
cd ../deployment/ansible

ansible --version 0</dev/null |& cat -
ansible-playbook playbooks/build-judgels-client.yml 0</dev/null |& cat -
ansible-playbook -e app_version=test-pending playbooks/build-judgels-client.yml 0</dev/null |& cat -
2 changes: 1 addition & 1 deletion deployment/scripts/build_judgels_server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ cp init.sh build/distributions
cd ../../deployment/ansible

ansible --version
ansible-playbook playbooks/build-judgels-server.yml
ansible-playbook -e app_version=test-pending playbooks/build-judgels-server.yml
2 changes: 1 addition & 1 deletion deployment/scripts/deploy_judgels_client.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ set -ex
cd deployment/ansible

ansible --version
ansible-playbook -e @env/vars.yml playbooks/deploy-judgels-client.yml
ansible-playbook -e @env/vars.yml -e app_version=test-pending playbooks/deploy-judgels-client.yml
2 changes: 1 addition & 1 deletion deployment/scripts/deploy_judgels_server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ set -ex
cd deployment/ansible

ansible --version
ansible-playbook -e @env/vars.yml playbooks/deploy-judgels-server.yml
ansible-playbook -e @env/vars.yml -e app_version=test-pending playbooks/deploy-judgels-server.yml
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,9 @@ public Response getSubmissionSourceDarkImage(@PathParam("submissionJid") String

@POST
@Consumes(MULTIPART_FORM_DATA)
@Produces(APPLICATION_JSON)
@UnitOfWork
public void createSubmission(@HeaderParam(AUTHORIZATION) AuthHeader authHeader, FormDataMultiPart parts) {
public Submission createSubmission(@HeaderParam(AUTHORIZATION) AuthHeader authHeader, FormDataMultiPart parts) {
actorChecker.check(authHeader);

String containerJid = checkNotNull(parts.getField("containerJid"), "containerJid").getValue();
Expand All @@ -255,6 +256,8 @@ public void createSubmission(@HeaderParam(AUTHORIZATION) AuthHeader authHeader,
Submission submission = submissionClient.submit(data, source, config);

submissionSourceBuilder.storeSubmissionSource(submission.getJid(), source);

return submission;
}

@POST
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { HTMLTable, Button } from '@blueprintjs/core';
import { HTMLTable, Button, ProgressBar } from '@blueprintjs/core';
import { Download } from '@blueprintjs/icons';
import { Link } from 'react-router-dom';

Expand Down Expand Up @@ -30,6 +30,8 @@ export function SubmissionDetails({
problemUrl,
containerName,
onDownload,
hideSourceFilename,
showLoaderWhenPending,
}) {
const hasSubtasks = latestGrading && latestGrading.details && latestGrading.details.subtaskResults.length > 1;

Expand Down Expand Up @@ -146,6 +148,13 @@ export function SubmissionDetails({
));
};

const renderLoader = () => {
if (showLoaderWhenPending && latestGrading.verdict.code === VerdictCode.PND) {
return <ProgressBar className="pending-loader" />;
}
return null;
};

const renderSampleTestDataResults = () => {
const details = latestGrading.details;
if (details.testDataResults.length < 1) {
Expand Down Expand Up @@ -302,9 +311,11 @@ export function SubmissionDetails({

const sourceFiles = Object.keys(submissionFiles).map(key => (
<ContentCard key={key}>
<h5>
{key === DEFAULT_SOURCE_KEY ? '' : key + ': '} {submissionFiles[key].name}
</h5>
{!hideSourceFilename && (
<h5>
{key === DEFAULT_SOURCE_KEY ? '' : key + ': '} {submissionFiles[key].name}
</h5>
)}
<SourceCode language={getGradingLanguageSyntaxHighlighterValue(gradingLanguage)}>
{decodeBase64(submissionFiles[key].content)}
</SourceCode>
Expand Down Expand Up @@ -343,7 +354,7 @@ export function SubmissionDetails({

const renderSourceFilesHeading = () => {
if (!onDownload) {
return <h4>Source Files</h4>;
return null;
}
return (
<div>
Expand All @@ -359,6 +370,7 @@ export function SubmissionDetails({
return (
<div className="programming-submission-details">
{renderGeneralInfo()}
{renderLoader()}
{renderDetails()}
{renderSourceFiles()}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@
float: left;
}

.pending-loader {
margin-bottom: 15px;
}

.submission-details-image {
overflow: auto;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,20 @@ export function createSubmission(courseSlug, chapterJid, chapterAlias, problemJi
sourceFiles['sourceFiles.' + key] = data.sourceFiles[key];
});

await submissionProgrammingAPI.createSubmission(token, chapterJid, problemJid, data.gradingLanguage, sourceFiles);
const submission = await submissionProgrammingAPI.createSubmission(
token,
chapterJid,
problemJid,
data.gradingLanguage,
sourceFiles
);

toastActions.showSuccessToast('Solution submitted.');

window.scrollTo(0, 0);
dispatch(push(`/courses/${courseSlug}/chapters/${chapterAlias}/problems/${problemAlias}/submissions`));
dispatch(
push(`/courses/${courseSlug}/chapters/${chapterAlias}/problems/${problemAlias}/submissions/${submission.id}`)
);
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { selectCourse } from '../../../../../../../../../modules/courseSelectors
import { selectCourseChapter } from '../../../../../../../modules/courseChapterSelectors';
import * as breadcrumbsActions from '../../../../../../../../../../../../modules/breadcrumbs/breadcrumbsActions';
import * as chapterProblemSubmissionActions from '../../modules/chapterProblemSubmissionActions';
import { VerdictCode } from '../../../../../../../../../../../../modules/api/gabriel/verdict';

export class ChapterProblemSubmissionPage extends Component {
state = {
Expand All @@ -22,20 +23,10 @@ export class ChapterProblemSubmissionPage extends Component {
containerName: undefined,
};

async componentDidMount() {
const { data, profile, problemName, containerName } = await this.props.onGetSubmissionWithSource(
+this.props.match.params.submissionId,
this.props.statementLanguage
);
const sourceImageUrl = data.source ? undefined : await this.props.onGetSubmissionSourceImage(data.submission.jid);
this.props.onPushBreadcrumb(this.props.match.url, '#' + data.submission.id);
this.setState({
submissionWithSource: data,
sourceImageUrl,
profile,
problemName,
containerName,
});
currentTimeout;

componentDidMount() {
this.refreshSubmission();
}

async componentWillUnmount() {
Expand Down Expand Up @@ -63,6 +54,36 @@ export class ChapterProblemSubmissionPage extends Component {
);
}

refreshSubmission = async () => {
const { data, profile, problemName, containerName } = await this.props.onGetSubmissionWithSource(
+this.props.match.params.submissionId,
this.props.statementLanguage
);
const sourceImageUrl = data.source ? undefined : await this.props.onGetSubmissionSourceImage(data.submission.jid);
this.props.onPushBreadcrumb(this.props.match.url, '#' + data.submission.id);
this.setState({
submissionWithSource: data,
sourceImageUrl,
profile,
problemName,
containerName,
});

if (sourceImageUrl) {
return;
}

const verdictCode = data.submission.latestGrading && data.submission.latestGrading.verdict.code;

if (verdictCode === VerdictCode.PND) {
this.currentTimeout = setTimeout(this.refreshSubmission, 2000);
} else if (verdictCode === VerdictCode.AC) {
if (this.currentTimeout) {
window.location.reload();
}
}
};

renderSubmission = () => {
const { submissionWithSource, profile, sourceImageUrl } = this.state;
const { course, chapter } = this.props;
Expand All @@ -79,6 +100,8 @@ export class ChapterProblemSubmissionPage extends Component {
sourceImageUrl={sourceImageUrl}
profile={profile}
problemUrl={`/courses/${course.slug}/chapters/${chapter.alias}/problems/${problemAlias}`}
hideSourceFilename
showLoaderWhenPending
/>
);
};
Expand Down

0 comments on commit 4cb1ea5

Please sign in to comment.