diff --git a/.circleci/config.yml b/.circleci/config.yml index 8fee5a3..cd5cb25 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -43,6 +43,17 @@ jobs: aws ecr get-login-password | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker tag ${SERVICE_NAME}:${CIRCLE_SHA1} $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/${SERVICE_NAME}:${CIRCLE_SHA1} docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/${SERVICE_NAME}:${CIRCLE_SHA1} + if [ "${CIRCLE_PULL_REQUEST}" != "" ]; then + echo "Publishing to ECR QA" + # Publish to ECR QA + ./awsconfiguration.sh QA + source awsenvconf + aws ecr get-login-password | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com + docker tag ${SERVICE_NAME}:${CIRCLE_SHA1} $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/${SERVICE_NAME}:${CIRCLE_SHA1} + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/${SERVICE_NAME}:${CIRCLE_SHA1} + else + echo "Not publishing to ECR QA" + fi workflows: version: 2 diff --git a/package.json b/package.json index 68ac2b8..68133d9 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,9 @@ "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@topcoder-framework/client-relational": "^0.11.0", - "@topcoder-framework/domain-challenge": "^0.11.0", - "@topcoder-framework/lib-common": "^0.11.0", + "@topcoder-framework/client-relational": "^0.12.0", + "@topcoder-framework/domain-challenge": "^0.12.0", + "@topcoder-framework/lib-common": "^0.12.0", "axios": "^1.3.4", "dayjs": "^1.11.7", "decimal.js": "^10.4.3", diff --git a/src/models/domain-layer/legacy/services/challenge.ts b/src/models/domain-layer/legacy/services/challenge.ts index a16d202..8abab77 100644 --- a/src/models/domain-layer/legacy/services/challenge.ts +++ b/src/models/domain-layer/legacy/services/challenge.ts @@ -1,12 +1,16 @@ /* eslint-disable */ import { handleUnaryCall, UntypedServiceImplementation } from "@grpc/grpc-js"; -import { CheckExistsResult, CreateResult, Empty, LookupCriteria, UpdateResult } from "@topcoder-framework/lib-common"; import { - CloseChallengeInput, + CheckExistsResult, + CreateResult, + PhaseFactRequest, + PhaseFactResponse, + UpdateResult, +} from "@topcoder-framework/lib-common"; +import { CreateChallengeInput, LegacyChallenge, LegacyChallengeId, - LegacyChallengeList, UpdateChallengeInput, } from "../challenge"; @@ -16,25 +20,19 @@ export const LegacyChallengeService = { path: "/topcoder.domain.service.legacy_challenge_service.LegacyChallenge/CheckExists", requestStream: false, responseStream: false, - requestSerialize: (value: LegacyChallengeId) => Buffer.from(LegacyChallengeId.encode(value).finish()), + requestSerialize: (value: LegacyChallengeId) => + Buffer.from(LegacyChallengeId.encode(value).finish()), requestDeserialize: (value: Buffer) => LegacyChallengeId.decode(value), - responseSerialize: (value: CheckExistsResult) => Buffer.from(CheckExistsResult.encode(value).finish()), + responseSerialize: (value: CheckExistsResult) => + Buffer.from(CheckExistsResult.encode(value).finish()), responseDeserialize: (value: Buffer) => CheckExistsResult.decode(value), }, - lookup: { - path: "/topcoder.domain.service.legacy_challenge_service.LegacyChallenge/Lookup", - requestStream: false, - responseStream: false, - requestSerialize: (value: LookupCriteria) => Buffer.from(LookupCriteria.encode(value).finish()), - requestDeserialize: (value: Buffer) => LookupCriteria.decode(value), - responseSerialize: (value: LegacyChallengeList) => Buffer.from(LegacyChallengeList.encode(value).finish()), - responseDeserialize: (value: Buffer) => LegacyChallengeList.decode(value), - }, create: { path: "/topcoder.domain.service.legacy_challenge_service.LegacyChallenge/Create", requestStream: false, responseStream: false, - requestSerialize: (value: CreateChallengeInput) => Buffer.from(CreateChallengeInput.encode(value).finish()), + requestSerialize: (value: CreateChallengeInput) => + Buffer.from(CreateChallengeInput.encode(value).finish()), requestDeserialize: (value: Buffer) => CreateChallengeInput.decode(value), responseSerialize: (value: CreateResult) => Buffer.from(CreateResult.encode(value).finish()), responseDeserialize: (value: Buffer) => CreateResult.decode(value), @@ -43,7 +41,8 @@ export const LegacyChallengeService = { path: "/topcoder.domain.service.legacy_challenge_service.LegacyChallenge/Update", requestStream: false, responseStream: false, - requestSerialize: (value: UpdateChallengeInput) => Buffer.from(UpdateChallengeInput.encode(value).finish()), + requestSerialize: (value: UpdateChallengeInput) => + Buffer.from(UpdateChallengeInput.encode(value).finish()), requestDeserialize: (value: Buffer) => UpdateChallengeInput.decode(value), responseSerialize: (value: UpdateResult) => Buffer.from(UpdateResult.encode(value).finish()), responseDeserialize: (value: Buffer) => UpdateResult.decode(value), @@ -52,37 +51,40 @@ export const LegacyChallengeService = { path: "/topcoder.domain.service.legacy_challenge_service.LegacyChallenge/Get", requestStream: false, responseStream: false, - requestSerialize: (value: LegacyChallengeId) => Buffer.from(LegacyChallengeId.encode(value).finish()), + requestSerialize: (value: LegacyChallengeId) => + Buffer.from(LegacyChallengeId.encode(value).finish()), requestDeserialize: (value: Buffer) => LegacyChallengeId.decode(value), - responseSerialize: (value: LegacyChallenge) => Buffer.from(LegacyChallenge.encode(value).finish()), + responseSerialize: (value: LegacyChallenge) => + Buffer.from(LegacyChallenge.encode(value).finish()), responseDeserialize: (value: Buffer) => LegacyChallenge.decode(value), }, - activate: { - path: "/topcoder.domain.service.legacy_challenge_service.LegacyChallenge/Activate", + /** + * This is a necessary indirection (challenge-api -> domain-challenge -> acl) + * When we have a proper review API in place, these requests can go to + * review-api or domain-review directly. + */ + getPhaseFacts: { + path: "/topcoder.domain.service.legacy_challenge_service.LegacyChallenge/GetPhaseFacts", requestStream: false, responseStream: false, - requestSerialize: (value: LegacyChallengeId) => Buffer.from(LegacyChallengeId.encode(value).finish()), - requestDeserialize: (value: Buffer) => LegacyChallengeId.decode(value), - responseSerialize: (value: Empty) => Buffer.from(Empty.encode(value).finish()), - responseDeserialize: (value: Buffer) => Empty.decode(value), - }, - closeChallenge: { - path: "/topcoder.domain.service.legacy_challenge_service.LegacyChallenge/CloseChallenge", - requestStream: false, - responseStream: false, - requestSerialize: (value: CloseChallengeInput) => Buffer.from(CloseChallengeInput.encode(value).finish()), - requestDeserialize: (value: Buffer) => CloseChallengeInput.decode(value), - responseSerialize: (value: LegacyChallenge) => Buffer.from(LegacyChallenge.encode(value).finish()), - responseDeserialize: (value: Buffer) => LegacyChallenge.decode(value), + requestSerialize: (value: PhaseFactRequest) => + Buffer.from(PhaseFactRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => PhaseFactRequest.decode(value), + responseSerialize: (value: PhaseFactResponse) => + Buffer.from(PhaseFactResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => PhaseFactResponse.decode(value), }, } as const; export interface LegacyChallengeServer extends UntypedServiceImplementation { checkExists: handleUnaryCall; - lookup: handleUnaryCall; create: handleUnaryCall; update: handleUnaryCall; get: handleUnaryCall; - activate: handleUnaryCall; - closeChallenge: handleUnaryCall; + /** + * This is a necessary indirection (challenge-api -> domain-challenge -> acl) + * When we have a proper review API in place, these requests can go to + * review-api or domain-review directly. + */ + getPhaseFacts: handleUnaryCall; } diff --git a/src/service/LegacyChallenge.ts b/src/service/LegacyChallenge.ts index aa4fd97..82a64d5 100644 --- a/src/service/LegacyChallenge.ts +++ b/src/service/LegacyChallenge.ts @@ -1,11 +1,9 @@ import { handleUnaryCall, sendUnaryData, ServerUnaryCall, UntypedHandleCall } from "@grpc/grpc-js"; import { - CloseChallengeInput, CreateChallengeInput, LegacyChallenge, LegacyChallengeId, - LegacyChallengeList, UpdateChallengeInput, } from "../models/domain-layer/legacy/challenge"; @@ -17,7 +15,8 @@ import { import { CheckExistsResult, CreateResult, - LookupCriteria, + PhaseFactRequest, + PhaseFactResponse, UpdateResult, } from "@topcoder-framework/lib-common"; import LegacyChallengeDomain from "../domain/LegacyChallenge"; @@ -53,13 +52,6 @@ class LegacyChallengeServerImpl implements LegacyChallengeServer { .catch((err: Error) => callback(ErrorHelper.wrapError(err), null)); }; - lookup: handleUnaryCall = ( - call: ServerUnaryCall, - callback: sendUnaryData - ) => { - // TODO: Implement lookup - }; - update: handleUnaryCall = ( call: ServerUnaryCall, callback: sendUnaryData @@ -69,18 +61,11 @@ class LegacyChallengeServerImpl implements LegacyChallengeServer { .catch((err: Error) => callback(ErrorHelper.wrapError(err), null)); }; - activate: handleUnaryCall = ( - call: ServerUnaryCall, - callback: sendUnaryData - ) => { - // TODO: Remove this method - }; - - closeChallenge: handleUnaryCall = ( - call: ServerUnaryCall, - callback: sendUnaryData + getPhaseFacts: handleUnaryCall = ( + call: ServerUnaryCall, + callback: sendUnaryData ) => { - // TODO: Remove this method + // TODO: Left blank intentionally }; } diff --git a/yarn.lock b/yarn.lock index 4095db9..49b40a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -363,35 +363,35 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@topcoder-framework/client-relational@^0.11.0": - version "0.11.0" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/client-relational/-/client-relational-0.11.0.tgz#16bc92db5bb93d6f6abcbf42a2b1cc84c4911ae2" - integrity sha512-pR9WGDDmr96JERZkuq+aXMSPwDL1VQCUAPQtw/vyVP8OrGt6fdjhK/Z5azOP6g8bVOyT0sKkbAyv+7HcuJ46ng== +"@topcoder-framework/client-relational@^0.12.0": + version "0.12.0" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/client-relational/-/client-relational-0.12.0.tgz#6b6e27b471564e1e83a335add55f9dea5ba8dc47" + integrity sha512-8DDg16of2w6XxlQDHJczaF3qnoSYP9DVbQ98Wr4rVxonrtOTuSfTIaaZ74jKqlpGZ/jKhqQ9tvAxNs3+jCbxWA== dependencies: "@grpc/grpc-js" "^1.8.0" - "@topcoder-framework/lib-common" "^0.11.0" - topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.49" + "@topcoder-framework/lib-common" "^0.12.0" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.50-beta-1" tslib "^2.4.1" -"@topcoder-framework/domain-challenge@^0.11.0": - version "0.11.0" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/domain-challenge/-/domain-challenge-0.11.0.tgz#13a00bcee32206277778ab25d0f30ecaf2cb45a9" - integrity sha512-6aylTyJOZjui4duwU4d3l9CUnqVTMwXSolfX6LxwR8qdMzFpIgIp4igt8y+fCZ9YZgqcQLE93ns/jY1N0yO9ZA== +"@topcoder-framework/domain-challenge@^0.12.0": + version "0.12.0" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/domain-challenge/-/domain-challenge-0.12.0.tgz#278d72865e5f71888e6cfb5e37dab58bdd93783f" + integrity sha512-BgNDpsPWGGF80T94uZ0mZq1B5EvkX3eptwz7wxB3HfjCz/T1HHF0f9EsBCcJcT0TBI5NmID5al3UVg5Y8HSLCg== dependencies: "@grpc/grpc-js" "^1.8.0" - "@topcoder-framework/client-relational" "^0.11.0" - "@topcoder-framework/lib-common" "^0.11.0" - topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.49" + "@topcoder-framework/client-relational" "^0.12.0" + "@topcoder-framework/lib-common" "^0.12.0" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.50-beta-1" tslib "^2.4.1" -"@topcoder-framework/lib-common@^0.11.0": - version "0.11.0" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/lib-common/-/lib-common-0.11.0.tgz#fc5d10a52797555b1ef97969c66bd204f90b5111" - integrity sha512-nAkpQ+EAuVnoVlaU5YHOLqe9xn0tQwvmyD+EuGfd75tZ/KbzHrGzvliTEiJtDjcKExv8qCDmSVkzUDEEP47U0Q== +"@topcoder-framework/lib-common@^0.12.0": + version "0.12.0" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com/npm/topcoder-framework/@topcoder-framework/lib-common/-/lib-common-0.12.0.tgz#734302c626b2e43b8a5d80249070e292fe2e9682" + integrity sha512-Sy3bw11ZlabCT3SK0qkIv9gi/NiP7R72JtwzRXi15OlPr2/oRno8OGpjrhqhTCLtUhpGPDKjm/Q9intfZSPO7w== dependencies: "@grpc/grpc-js" "^1.8.0" rimraf "^3.0.2" - topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.49" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.50-beta-1" tslib "^2.4.1" "@tsconfig/node10@^1.0.7": @@ -2615,6 +2615,10 @@ to-regex-range@^5.0.1: version "1.0.0" resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/2688ec4d265f32d9d980eff6120b0e4740f22c12" +"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.50-beta-1": + version "1.0.0" + resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/8adde65946946b00b9275d33c4b4f18caf5847fc" + tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"