feat: release rdbms to production (#45169)

* fix: add cert to email for when all certs are earned

* fix: unhide rdbms from production

* fix: cert project input field

* feat: add cypress tests

* fix: message on project pages to lower expectations

* fix: update instructions

* fix: add quincy's suggestions

* fix: add beta label and reorder

* fix: utils test

* fix: move rdbms to bottom of settings

* fix: cypress tests

* Apply suggestions from code review

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>

* fix: only drop seeded users webhook tokens

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
Tom
2022-03-04 04:08:09 -06:00
committed by GitHub
parent 68ad98f83d
commit 84c305ab08
28 changed files with 225 additions and 115 deletions

View File

@@ -411,7 +411,7 @@
}
},
"relational-database": {
"title": "Relational Database",
"title": "Relational Database (Beta)",
"intro": [
"For these courses, you will use real developer tools and software including VS Code, PostgreSQL, and the Linux / Unix command line to complete interactive tutorials and build projects.",
"These courses start off with basic Bash commands. Using the terminal, you will learn everything from navigating and manipulating a file system, scripting in Bash, all the way to advanced usage.",
@@ -458,62 +458,62 @@
"title": "Learn Advanced Bash by Building a Kitty Ipsum Translator",
"intro": [
"There's more to Bash commands than you might think.",
"In this 140 lesson course, you will learn some more complex commands, and the details of how commands work."
"In this 140-lesson course, you will learn some more complex commands, and the details of how commands work."
]
},
"learn-bash-and-sql-by-building-a-bike-rental-shop": {
"title": "Learn Bash and SQL by Building a Bike Rental Shop",
"intro": [
"In this 210 lesson course, you will build an interactive Bash program that stores rental information for your bike rental shop using PostgreSQL."
"In this 210-lesson course, you will build an interactive Bash program that stores rental information for your bike rental shop using PostgreSQL."
]
},
"learn-bash-by-building-a-boilerplate": {
"title": "Learn Bash by Building a Boilerplate",
"intro": [
"The terminal allows you to send text commands to your computer that can manipulate the file system, run programs, automate tasks, and much more.",
"In this 170 lesson course, you will learn basic commands by creating a website boilerplate using only the command line."
"In this 170-lesson course, you will learn terminal commands by creating a website boilerplate using only the command line."
]
},
"learn-bash-scripting-by-building-five-programs": {
"title": "Learn Bash Scripting by Building Five Programs",
"intro": [
"Bash scripts combine terminal commands and logic into programs that can execute or automate tasks, and much more.",
"In this 220 lesson course, you will learn more terminal commands and how to use them within Bash scripts by creating five small programs."
"In this 220-lesson course, you will learn more terminal commands and how to use them within Bash scripts by creating five small programs."
]
},
"learn-git-by-building-an-sql-reference-object": {
"title": "Learn Git by Building an SQL Reference Object",
"intro": [
"Git is a version control system that keeps track of all the changes you make to your codebase.",
"In this 240 lesson course, you will learn how Git keeps track of your code by creating an object containing commonly used SQL commands."
"In this 240-lesson course, you will learn how Git keeps track of your code by creating an object containing commonly used SQL commands."
]
},
"learn-nano-by-building-a-castle": {
"title": "Learn Nano by Building a Castle",
"intro": [
"Nano is a program that allows you to edit files right in the terminal.",
"In this 40 lesson course, you will learn how to edit files in the terminal with Nano while building a castle."
"In this 40-lesson course, you will learn how to edit files in the terminal with Nano while building a castle."
]
},
"learn-relational-databases-by-building-a-mario-database": {
"title": "Learn Relational Databases by Building a Mario Database",
"intro": [
"A relational database organizes data into tables that are linked together through relationships.",
"In this 165 lesson course, you will learn the basics of a relational database by creating a PostgreSQL database filled with video game characters."
"In this 165-lesson course, you will learn the basics of a relational database by creating a PostgreSQL database filled with video game characters."
]
},
"learn-sql-by-building-a-student-database-part-1": {
"title": "Learn SQL by Building a Student Database: Part 1",
"intro": [
"SQL, or Structured Query Language, is the language for communicating with a relational database.",
"In this 140 lesson course, you will create a Bash script that uses SQL to enter information about your computer science students into PostgreSQL."
"In this 140-lesson course, you will create a Bash script that uses SQL to enter information about your computer science students into PostgreSQL."
]
},
"learn-sql-by-building-a-student-database-part-2": {
"title": "Learn SQL by Building a Student Database: Part 2",
"intro": [
"SQL join commands are used to combine information from multiple tables in a relational database",
"In this 140 lesson course, you will complete your student database while diving deeper into SQL commands."
"In this 140-lesson course, you will complete your student database while diving deeper into SQL commands."
]
}
}

View File

@@ -298,7 +298,7 @@
"help-translate": "We are still translating the following certifications.",
"help-translate-link": "Help us translate.",
"project-preview-title": "Here's a preview of what you will build",
"github-required": "A <0>GitHub</0> account is required to run the project. You will need to create one if you haven't already.",
"github-required": "<0>Create a GitHub</0> account if you don't have one. You'll need it when you create the virtual Linux server machine. This process may take a few minutes.",
"step-1": "Step 1: Complete the project",
"step-2": "Step 2: Submit your code",
"submit-public-url": "When you have completed the project, save all the required files into a public repository and submit the URL to it below.",

View File

@@ -27,7 +27,7 @@ import {
import { User } from '../redux/prop-types';
import { submitNewAbout, updateUserFlag, verifyCert } from '../redux/settings';
const { apiLocation, deploymentEnv } = envData;
const { apiLocation } = envData;
// TODO: update types for actions
interface ShowSettingsProps {
@@ -202,8 +202,8 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
username={username}
verifyCert={verifyCert}
/>
{deploymentEnv == 'staging' && <Spacer />}
{deploymentEnv == 'staging' && <WebhookToken />}
<Spacer />
<WebhookToken />
<Spacer />
<DangerZone />
</main>

View File

@@ -74,7 +74,7 @@ class WebhookToken extends Component<WebhookTokenProps, WebhookTokenState> {
return isChallengePage ? (
<>
{!webhookToken && (
<div className='alert alert-info'>
<div className='alert alert-info' data-cy='webhook-challenge-page'>
<p>{t('webhook-token.create-p1')}</p>
<Spacer />
<Button
@@ -89,7 +89,10 @@ class WebhookToken extends Component<WebhookTokenProps, WebhookTokenState> {
)}
</>
) : (
<div className='webhook-token text-center'>
<div
className='webhook-token text-center'
data-cy='webhook-settings-page'
>
<FullWidthRow>
<Panel className='webhook-panel'>
<Panel.Heading>{t('webhook-token.title')}</Panel.Heading>

View File

@@ -1,7 +1,7 @@
import { SuperBlocks } from '../../../config/certification-settings';
import envData from '../../../config/env.json';
const { deploymentEnv, showNewCurriculum, showUpcomingChanges } = envData;
const { showNewCurriculum, showUpcomingChanges } = envData;
const responsiveWebBase =
'/learn/responsive-web-design/responsive-web-design-projects';
@@ -455,44 +455,6 @@ const certMap = [
}
]
},
{
id: '606243f50267e718b1e755f4',
title: 'Relational Database',
certSlug: 'relational-database-v8',
flag: 'isRelationalDatabaseCertV8',
projects: [
{
id: '5f1a4ef5d5d6b5ab580fc6ae',
title: 'Celestial Bodies Database',
link: `${relationalDatabaseBase}/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database`,
certSlug: 'relational-database-v8'
},
{
id: '5f9771307d4d22b9d2b75a94',
title: 'World Cup Database',
link: `${relationalDatabaseBase}/build-a-world-cup-database-project/build-a-world-cup-database`,
certSlug: 'relational-database-v8'
},
{
id: '5f87ac112ae598023a42df1a',
title: 'Salon Appointment Scheduler',
link: `${relationalDatabaseBase}/build-a-salon-appointment-scheduler-project/build-a-salon-appointment-scheduler`,
certSlug: 'relational-database-v8'
},
{
id: '602d9ff222201c65d2a019f2',
title: 'Periodic Table Database',
link: `${relationalDatabaseBase}/build-a-periodic-table-database-project/build-a-periodic-table-database`,
certSlug: 'relational-database-v8'
},
{
id: '602da04c22201c65d2a019f4',
title: 'Number Guessing Game',
link: `${relationalDatabaseBase}/build-a-number-guessing-game-project/build-a-number-guessing-game`,
certSlug: 'relational-database-v8'
}
]
},
{
id: '561add10cb82ac38a17523bc',
title: 'Back End Development and APIs',
@@ -721,6 +683,44 @@ const certMap = [
certSlug: 'machine-learning-with-python-v7'
}
]
},
{
id: '606243f50267e718b1e755f4',
title: 'Relational Database',
certSlug: 'relational-database-v8',
flag: 'isRelationalDatabaseCertV8',
projects: [
{
id: '5f1a4ef5d5d6b5ab580fc6ae',
title: 'Celestial Bodies Database',
link: `${relationalDatabaseBase}/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database`,
certSlug: 'relational-database-v8'
},
{
id: '5f9771307d4d22b9d2b75a94',
title: 'World Cup Database',
link: `${relationalDatabaseBase}/build-a-world-cup-database-project/build-a-world-cup-database`,
certSlug: 'relational-database-v8'
},
{
id: '5f87ac112ae598023a42df1a',
title: 'Salon Appointment Scheduler',
link: `${relationalDatabaseBase}/build-a-salon-appointment-scheduler-project/build-a-salon-appointment-scheduler`,
certSlug: 'relational-database-v8'
},
{
id: '602d9ff222201c65d2a019f2',
title: 'Periodic Table Database',
link: `${relationalDatabaseBase}/build-a-periodic-table-database-project/build-a-periodic-table-database`,
certSlug: 'relational-database-v8'
},
{
id: '602da04c22201c65d2a019f4',
title: 'Number Guessing Game',
link: `${relationalDatabaseBase}/build-a-number-guessing-game-project/build-a-number-guessing-game`,
certSlug: 'relational-database-v8'
}
]
}
] as const;
@@ -745,12 +745,7 @@ certMap.forEach(cert => {
if (cert.title !== 'Legacy Full Stack') {
if (cert.title.startsWith('Legacy')) {
legacyProjectMap[cert.title] = cert.projects;
} else if (
cert.title.startsWith('Relational') &&
deploymentEnv == 'staging'
) {
projectMap[cert.title] = cert.projects;
} else if (!cert.title.startsWith('Relational')) {
} else {
projectMap[cert.title] = cert.projects;
}
}

View File

@@ -257,7 +257,7 @@ class ShowCodeAlly extends Component<ShowCodeAllyProps, ShowCodeAllyState> {
<div className='ca-description'>
<Trans i18nKey='learn.github-required'>
<a
href='https://github.com'
href='https://github.com/join'
rel='noopener noreferrer'
target='_blank'
title={t('learn.github-link')}

View File

@@ -6,7 +6,8 @@ import {
backend,
backEndProject,
frontEndProject,
pythonProject
pythonProject,
codeAllyCert
} from '../../../../utils/challenge-types';
import { Form, ValidatedValues } from '../../../components/formHelpers';
@@ -101,6 +102,12 @@ export class SolutionForm extends Component<FormProps> {
: 'https://replit.com/@camperbot/hello');
break;
case codeAllyCert:
formFields = solutionField;
options.isEditorLinkAllowed = true;
solutionLink = solutionLink + 'https://your-git-repo.url/files';
break;
default:
formFields = solutionField;
solutionLink =

View File

@@ -10,7 +10,7 @@ const {
getChallengesDirForLang
} = require('../../curriculum/getChallenges');
const { curriculumLocale, deploymentEnv } = envData;
const { curriculumLocale } = envData;
exports.localeChallengesRootDir = getChallengesDirForLang(curriculumLocale);
@@ -38,12 +38,6 @@ exports.replaceChallengeNode = () => {
exports.buildChallenges = async function buildChallenges() {
const curriculum = await getChallengesForLang(curriculumLocale);
// temp removal of rdbms from production
if (deploymentEnv !== 'staging') {
delete curriculum['13-relational-databases'];
}
const superBlocks = Object.keys(curriculum);
const blocks = superBlocks
.map(superBlock => curriculum[superBlock].blocks)

View File

@@ -20,6 +20,7 @@ exports.backend = backend;
exports.frontEndProject = frontEndProject;
exports.backEndProject = backEndProject;
exports.pythonProject = pythonProject;
exports.codeAllyCert = codeAllyCert;
exports.challengeTypes = {
html,