Skip to content

Commit

Permalink
Merge pull request #2626 from codecrafters-io/andy/feat
Browse files Browse the repository at this point in the history
[CC-1514] feat: add buildpack version management to submission details
  • Loading branch information
andy1li authored Feb 12, 2025
2 parents ab2dbbb + 6ac202e commit 4303bee
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,27 @@
</div>
</CourseAdmin::SubmissionsPage::SubmissionDetails::HeaderContainerRow>

<CourseAdmin::SubmissionsPage::SubmissionDetails::HeaderContainerRow @title="Buildpack">
<div class="flex items-center">
<span class="text-gray-600">
{{this.buildpackSlug}}
</span>

{{#if @submission.repository.buildpack.isLatest}}
<span class="ml-1 text-gray-400 text-sm">(active)</span>
{{else}}
<TertiaryButtonWithSpinner
@shouldShowSpinner={{this.isUpdatingBuildpack}}
@size="extra-small"
class="ml-2"
{{on "click" this.handleBuildpackUpdateButtonClick}}
>
Update to active version
</TertiaryButtonWithSpinner>
{{/if}}
</div>
</CourseAdmin::SubmissionsPage::SubmissionDetails::HeaderContainerRow>

<CourseAdmin::SubmissionsPage::SubmissionDetails::HeaderContainerRow @title="Commit SHA" data-test-commit-sha>
<div class="flex items-center">
<span class="mr-2 text-gray-600">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,21 @@ export interface Signature {
}

export default class HeaderContainerComponent extends Component<Signature> {
@tracked isUpdatingBuildpack = false;
@tracked isUpdatingTesterVersion = false;
@tracked isForking = false;

@service declare authenticator: AuthenticatorService;
@service declare router: RouterService;

get buildpackSlug() {
if (this.args.submission.repository.buildpack) {
return this.args.submission.repository.buildpack.slug;
} else {
return 'Unknown';
}
}

get durationInMilliseconds() {
return this.args.submission.evaluations[0]!.createdAt.getTime() - this.args.submission.createdAt.getTime();
}
Expand Down Expand Up @@ -56,6 +65,13 @@ export default class HeaderContainerComponent extends Component<Signature> {
}
}

@action
async handleBuildpackUpdateButtonClick() {
this.isUpdatingBuildpack = true;
await this.args.submission.repository.updateBuildpack({});
this.isUpdatingBuildpack = false;
}

@action
async handleCopyCommitShaButtonClick() {
await navigator.clipboard.writeText(this.args.submission.commitSha);
Expand Down
8 changes: 8 additions & 0 deletions app/models/repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import RepositoryStageListModel from 'codecrafters-frontend/models/repository-st
import SubmissionModel from 'codecrafters-frontend/models/submission';
import UserModel from 'codecrafters-frontend/models/user';
import type AutofixRequestModel from './autofix-request';
import type BuildpackModel from './buildpack';
import type CourseExtensionModel from './course-extension';
import type CourseStageSolutionModel from './course-stage-solution';
import type Store from '@ember-data/store';
Expand Down Expand Up @@ -41,6 +42,7 @@ export default class RepositoryModel extends Model {
};

@hasMany('autofix-request', { async: false, inverse: 'repository' }) declare autofixRequests: AutofixRequestModel[];
@belongsTo('buildpack', { async: false, inverse: null }) declare buildpack: BuildpackModel;
@belongsTo('course', { async: false, inverse: null }) declare course: CourseModel;
@hasMany('course-extension-activation', { async: false, inverse: 'repository' }) declare extensionActivations: CourseExtensionActivation[];
@hasMany('course-stage-completion', { async: false, inverse: 'repository' }) declare courseStageCompletions: CourseStageCompletionModel[];
Expand Down Expand Up @@ -248,9 +250,15 @@ export default class RepositoryModel extends Model {
}

declare fork: (this: Model, payload: unknown) => Promise<{ data: { id: string } }>;
declare updateBuildpack: (this: Model, payload: unknown) => Promise<void>;
declare updateTesterVersion: (this: Model, payload: unknown) => Promise<void>;
}

RepositoryModel.prototype.updateBuildpack = memberAction({
path: 'update-buildpack',
type: 'post',
});

RepositoryModel.prototype.updateTesterVersion = memberAction({
path: 'update-tester-version',
type: 'post',
Expand Down
1 change: 1 addition & 0 deletions app/routes/course-admin/submissions.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export default class CourseAdminSubmissionsRoute extends BaseRoute {
...{
include: [
'evaluations',
'repository.buildpack',
'repository.language',
'repository.user',
'course-stage',
Expand Down

0 comments on commit 4303bee

Please sign in to comment.