Skip to content

[Google Blockly] Shareable procedures blocks#52932

Merged
mikeharv merged 24 commits into
stagingfrom
mike/shareable-procedures-blocks
Jul 31, 2023
Merged

[Google Blockly] Shareable procedures blocks#52932
mikeharv merged 24 commits into
stagingfrom
mike/shareable-procedures-blocks

Conversation

@mikeharv

@mikeharv mikeharv commented Jul 20, 2023

Copy link
Copy Markdown
Contributor

Overview

This PR adds a plugin from blockly-samples which provides a new backing data model for Blockly procedure blocks. Using this plugin, we can define new blocks for procedure definitions and call blocks (called "functions" on Code.org) that will allow us to do things like have a functions (or behaviors) exist on a workspace separate from the main workspace. (See Blockly demo for proof-of-concept)

This work is part of Sprite Lab's migration to Google Blockly.

Expand here for more information about how procedure blocks work on core Blockly and on our fork

About Blockly procedure blocks

Blockly implements procedures as a set of blocks that generate code for defining a procedure, and calling it. Definition blocks include an input field (for the name) and a statement input (for the blocks that go inside). Call blocks just include a label field (for the name).
image
Definition blocks also include specialized UI for adding descriptions and parameters.
image
image

About our function blocks

Code.org's function blocks are based on the procedure blocks included with core, but with some differences. Most noticeably, the color is different (handled by our Blockly themes) and the additional UI is missing from definition blocks. Code.org also has two main variations of its function blocks, dependent upon whether the level is using our custom "modal function editor". (These screenshots taken from CDO Blockly labs to establish our baseline.)

Standard level Modal function editor level
Call blocks image unchanged image
includes edit button for viewing/editing the definition in the modal function editor
Definition blocks image
Additional UI removed. Includes svg frame, labeled "Function"
image
Additional UI removed. Can only be viewed inside the modal function editor, which provides a separate workspace and additional UI. Input field is uneditable.

Proposals

  1. Use the @blockly/block-shareable-procedures plugin to create a new serializer.
  2. Define new block definitions for our function blocks.
  3. Install the new blocks in each of our Google Blockly labs which will replace the existing blocks.
  4. Re-enable setting Poetry and Dance levels to be configured with the modal function editor, for development purposes.
  5. Prevent regressions, particularly in Music Lab

Screenshots

New blocks in a standard Dance level:
image

New blocks in a level with the modal function editor "enabled":
image
Clicking the edit button re-focuses workspace and selects the definition:
2023-07-25 11-20-56 2023-07-25 11_21_50

Comparison of unpublished CSC level that uses functions with Sprite Lab:

CDO Blockly / Production Google blockly / this branch
image image

Importantly, these screenshots demonstrate that we can preserve the order of blocks set in the XML, even after forcing procedure definition blocks to actually be loaded first.

Technical Details

This change is admittedly fairly big, so I'm happy to pair review. In lieu of that, and for documentation purposes, the following sections outline all of the changes. The order of changes below is also my recommended order for reviewing the various files changed in this PR.

1. Adding the plugin

The latest version of the plugin has been updated to be compatible with Blockly v10. As we are still using Blockly 9.3.3, we need to use an "old" version. The Blockly team recommend v1 of the plugin as it is compatible with our current Blockly version. Components of the plugin are imported and used in the following files:

  • googleBlocklyWrapper.js - The plugins new models for procedures and parameters are imported here so that we can create and register a new procedures serializer. The serializer is responsible for providing all needed data to save a student's work, and to interpret that data to load things again later. Our serializer needs to be know about the new backing data model in order to do this correctly.
    • Note: The plugin provides a registerProcedureSerializer() function to do this automatically, but by handling it ourselves, we can add the serializer directly to the global Blockly wrapper. This allows us to test use the serializer directly in the browser console to help with testing and development. For example, we can run Blockly.procedureSerializer.save(Blockly.getMainWorkspace()) to get the procedures serialization without having to manually trigger a save or reload.
  • 'cdoUtils.js- We importunregisterProcedureBlocksto create aregisterCustomProcedureBlocks` helper that lets any of our labs quickly install the new block definitions over the existing ones.
    • Note: We also add a dummy registerCustomProcedureBlocks so that our lab code doesn't break Sprite Lab today.
  • cdoBlockSerializer.js and cdoXml.js - These files provide support for the two Blockly serialization systems. Each has been modified to sort the list of top blocks so that procedure definitions are loaded first. These blocks include the logic for creating a map entry in the new backing data model and so it was recommended that we handle them first.
    • XML only: Before using a cursor to reposition blocks on a workspace, we need to reorder them so that they match the original XML order. To do this, we use the new Xml.createBlockOrderMap to create a map of sorted positions to original positions.
  • cdoSerializationHelpers.js - positionBlocksOnWorkspace is an existing function that uses a "cursor" object to move blocks to unique positions after they have been rendered. If a map is provided (which happens if we started with XML ), we use that map to reorder the blocks before positioning them.

2. Defining the new blocks

Previously, function blocks for Google Blockly labs used the standard blocks defined by Blockly. We then overrode the init function of the blocks to get them to work how we wanted. See the deleted functionBlocks.js and functionBlocksNoFrame.js. This approach was messy as well as fragile. If Blockly ever updated anything about how these blocks were defined in core, our overrides would likely break. Instead, we can use Block's modern JSON format for defining our blocks. The mutators are provided in JavaScript, as extensions. Most of these extensions, and the bulk of the block definition logic, is provided by the plugin. See the following files:

  • proceduresBlocks.js - Provides the JSON definitions of the new blocks.
    • The basic structure of these blocks was copied from the plugin source files and modified to fit our needs. For example, our blocks definitions are dependent upon whether or not we are in a level that uses the modal function editor. (See Screenshots section above)
      • The biggest change made here is to begin using a label field instead of an input field for a definition's name when using using the modal function editor. We think this is actually a UI improvement as the previous approach (and uneditable text input field) looks like it's usable when it isn't. (See screenshots section above)
    • An extension is added to call blocks that enables the blue "Edit" button to work. Eventually, this extension should handle opening the modal function editor. For now, since all blocks are on the main workspace it simply scrolls to the associated definition block (if needed) and selects it.
    • An extension is added to definition blocks that adds the SVG frame. This is only done when we aren't using the modal function editor. It is also not done in Music Lab.
    • The 'procedure_def_mutator' extension is modified to use a custom version, for now. See next file for details.
  • mutators/procedureDefMutator.js - A near direct copy of the mutator provided with the plugin. Blockly didn't anticipate that users like us would want to customize the mutator UI. The mutator logic isn't exported in the current versions of the plugin and cannot be customized. Unfortunately, this means that for now we need to copy the entire mutator into our repo and make whatever changes we need. Specifically, this means removing the compose() and decompose() functions as these automatically add the "gear" icon UI for adding parameters.
    • Note: The Blockly team is aware of this issue and. is planning to update the plugin for us. However, that will require us to bump to v10, so we'll likely want to wait until after the Sprite Lab migration is finished. After updating to Blockly v10, we should be able to remove this entire file. We'll need to check the plugin's updated documentation to see exactly how to customize the UI to our needs at that time.
  • cdoFieldButton.js - This defines our button field which is used for several different blocks, including blocks that are specific to Sprite Lab and poetry. Today, our button fields include text (and an optional icon) that is styled directly after the containing block's style. This PR updates the class so that we can override the colors of the button. We communicate externally that users click the "blue edit button", so deviating from this design is out of scope. (Tagging @fisher-alice for review here.)

3. Installing the blocks

We can unregister the existing blocks and register the new ones in any lab by calling Blockly.cdoUtils.registerCustomProcedureBlocks(). The CDO wrapper includes a dummied version of this so we don't break existing labs that are still on the fork (ie. Sprite Lab). We are installing the new blocks in dance/blocks.js, music/blockly/setup.ts, and spritelab/blocks.js - the latter of which also supports Poetry.

4. Enabling the modal function editor on levels

Because we opted to migrate Dance Party without the modal function editor in 2022, we needed to disable that option in levels. See: #48857
This PR includes a small change that will allow us to start toggling the feature back on in levels, which should help greatly with development purposes. No published levels for Google Blockly levels use this setting today, and the curriculum team is not currently developing new levels with Poetry and Dance, so this doesn't feel too risky. I will let the team know that the modal function editor work is still a WIP and will not work as expected yet.
See _blockly.html.haml for the code change here.

5. Prevent Music Lab regressions

Music Lab does some thing differently from other labs, both under the hood and in terms of the actual user experience. With regards to functions, Music Lab never uses the modal function editor or the SVG frames for definition blocks - all other labs use one or the other. Normally, we can determine whether a level is using the editor by inspecting window.appOptions.level.useModalFunctionEditor. However, I confirmed on Slack that this won't work for Music Lab. If we can't check appOptions.level then we'll assume we don't want the modal function editor. See procedureBlocks.js line 6.
To handle not adding the SVG frame, the Music Lab implemented a change in February where a new injection option was added that determined which override of the block's init function to use. As we're not longer overriding this way (see 2, above), this had to be updated as well. Now, we assign this option directly to the Blockly wrapper if it's present and use that to determine if the frames should be added. See procedureBlocks.js.
Ideally, this lab state should be moved out of the Blockly options entirely, but that change feels out of scope. It would be great if the Music Lab and Lab2 devs (@sanchitmalhotra126 @breville @molly-moen) could consider where we want this option to live.

Links

Draft dev doc - https://docs.google.com/document/d/1cclChkqOiH8UKuSZKeJAG3iogmKfTc78UmlvuGA3Ed8/edit
Blockly procedure blocks documentation - https://developers.google.com/blockly/guides/create-custom-blocks/procedures/using-procedures

Testing story

I manually tested these changes, primarily using Dance, but also Poetry, Music Lab, and Sprite Lab (forced into using Google Blockly). Within Dance Party, I enabled the modal function editor on my local copy of the project level and used a separate curriculum level to test the non-modal experience. I tested our ability to continue deserializing old projects with both XML and JSON sources so that we can be confident that existing projects will not break.

Deployment strategy

Follow-up work

Privacy

Security

Caching

PR Checklist:

  • Tests provide adequate coverage
  • Privacy and Security impacts have been assessed
  • Code is well-commented
  • New features are translatable or updates will not break translations
  • Relevant documentation has been added or updated
  • User impact is well-understood and desirable
  • Pull Request is labeled appropriately
  • Follow-up work items (including potential tech debt) are tracked and linked

@mikeharv mikeharv changed the title Mike/shareable procedures blocks [Google Blockly] Shareable procedures blocks Jul 25, 2023
@mikeharv mikeharv marked this pull request as ready for review July 25, 2023 21:36

@molly-moen molly-moen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some initial comments/questions before we review in person tomorrow!

Comment thread apps/src/blockly/googleBlocklyWrapper.js
Comment thread apps/src/blockly/addons/cdoBlockSerializer.js Outdated
Comment thread apps/src/blockly/addons/cdoXml.js Outdated
Comment thread apps/src/blockly/customBlocks/googleBlockly/proceduresBlocks.js
Comment thread apps/src/blockly/customBlocks/googleBlockly/proceduresBlocks.js
Comment thread apps/src/blockly/customBlocks/googleBlockly/proceduresBlocks.js
Comment thread apps/src/blockly/cdoBlocklyWrapper.js

// This function sorts blocks of the specified types to the front of the list.
return copiedBlockStates.sort((a, b) => {
if (prioritizedBlockTypes.includes(a.type)) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This handles multiple block types because they always need to be in order from highest priority to lowest priority and .includes always searches front to back, right? Maybe worth adding a comment to that effect?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not actually. This handles multiple block types because we'll also need to sort behavior definition blocks to front of the list, once those are ready. The exact order does matter; as long as procedure definitions (of any type) are loaded before their associated callers, we should be good.

@ebeastlake ebeastlake Jul 27, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think my question is not, "Why do we need to support multiple block types?" but, "If we had a scenario where prioritizedblockTypes was an array like [blockTypeA, blockTypeB] indicating that all of type A needed to go first, all of type B needed to second, and then everything else goes last, why is it true that this code will work in this scenario?" (Maybe it's intuitive to other people, but it wasn't to me when I first looked, and I had to Google whether .includes always searches from front to back.) Do you think that question makes sense?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we had a scenario where prioritizedblockTypes was an array like [blockTypeA, blockTypeB] indicating that all of type A needed to go first, all of type B needed to second, and then everything else goes last, why is it true that this code will work in this scenario?"

I don't think it would work in that scenario. If it compared a block of type A and a block of type B, where both types are part of the prioritizedblockTypes list, block A would be positioned before block B. The order of the blocks doesn't matter if both are of a type we want to prioritize, so I think this is okay.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we change the code to only support one prioritized type for now? I think this might clarify the purpose, and we don't anticipate a use case for anything else, do we? (Or change prioritizedBlockTypes to be an object instead of an array to indicate that there's no significance to the order of the prioritizedBlockTypes array?) @molly-moen, thoughts? (I might be over-indexing on this.)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Open to suggestions here! FWIW, my next PR will add a second prioritized type ('behavior_definition'), which is why I went with a list of one rather than a single string for now. Both block types will need to be sorted to the front of the list. The order just impacts loading and adding procedure models. As long as the definition types are loaded before the call types, we should be good. So, it's not really "sort" as in "put them all in a specific order" so much as "filter out blocks of the specified types and put them first." Maybe I could refactor to use .filter() and then merge the two lists or something? Happy to change labels or add comments to help clarify this intended use!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That makes sense! You're right; this strikes me as a partitioning problem more than a "sorting" problem. What about something like:

function partitionBlocks(blockStates, typesToPartitionFirst) {
    let first = [];
    let rest = [];

    blocks.forEach(block => {
        typesToPartitionFirst.includes(block.type) ? first.push(block) : rest.push(block);
    });

    return [...first, ...rest];
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can see how the current name could be confusing, so switching it up/clearly commenting it makes sense. Maybe something like topBlockTypes? Although I also keep coming back to prioritized, the problem is it could mean "prioritized over all other blocks not in this list" (the intended definition), or "this list is in priority order" (unintended definition)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I refactored the sorting here and in CdoXml to use @ebeastlake's suggested partitioning approach:
4313d91

@molly-moen As of this commit, I'm still using "prioritized". Hopefully because we're no longer using a true .sort(), it's likely to falsely convey that the blocks are in "priority order". PTAL and let me know if you think there is a better way to describe this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!

// procedures map is updated correctly.
const blockStates = sortBlocksByType(
stateToLoad['blocks'],
procedureDefinitionTypes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: If this is something that's not really meant to be modified (or modified with great caution), should we make it a capital PROCEDURE_DEFINITION_TYPES? And I like that your argument name in sortBlocksByType -- prioritizedBlockTypes -- should we modify the name of this constant to indicate that they reflect priority?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call on the capitalization to notate that it shouldn't be modified.

I intentionally used prioritizedBlockTypes for the parameter name because that's how that argument is used in the context of the function.

The list we're importing (now called PROCEDURE_DEFINITION_TYPES) is simply some strings that signify block types. I imagine that it could be used for other things (such as determining which blocks need to be moved off the main workspace during serialization).

While it's less likely, I also feel like one could find a reason to pass a different list into the sort function. For example, we might one day decide to sort our blocks so that blocks of type "when_run" are sorted first before we position blocks on the workspace.

I was trying to keep the functionality of the sorts clear through parameter naming, while the name of the value being passed is more to indicate how we're using the sort.

Let me know your thoughts!

@mikeharv mikeharv Jul 28, 2023

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe something like:

  const prioritizedBlocks = blockStates.filter((block) =>
    PROCEDURE_DEFINITION_TYPES.includes(block.type)
  );

  const remainingBlocks = blockStates.filter((block) =>
    ! PROCEDURE_DEFINITION_TYPES.includes(block.type)
  );

  return [...prioritizedBlocks, ...remainingBlocks];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like that, and I think the two conversations we're having are coming full circle. I proposed something very similar here: https://github.com/code-dot-org/code-dot-org/pull/52932/files#r1277954940

Comment thread apps/src/blockly/addons/cdoFieldButton.js Outdated
Comment thread apps/src/blockly/addons/cdoSerializationHelpers.js

@molly-moen molly-moen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Comment thread apps/src/blockly/addons/cdoXml.js
* add a gear icon UI that we do not want. A future version of the plugin will
* export this mutator (and other extensions), but this will require bumping to
* Blockly v10.
* TODO: Once we are on Blockly v10, remove this file.

@ebeastlake ebeastlake Jul 28, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I add a ticket for this to the Code Tools backlog (potentially pending new board creation), so we can link it here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be great, thank you!

},
]);

// Respond to the click off a call block's edit button

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super-nit: of

// Move blocks of the specified types to the front of the list. Used by load()
function partitionBlocksByType(blockStates, prioritizedBlockTypes) {
// Create a copy of the blockStates array in case it's read-only
const copiedBlockStates = [...blockStates];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: I'm not sure you need this copy anymore.

Comment thread apps/src/blockly/addons/cdoXml.js Outdated
* @returns {Object[]} An array of objects containing the created blocks and their positions.
*/
blocklyWrapper.Xml.domToBlockSpace = function (workspace, xml) {
Blockly.Xml.createBlockOrderMap(xml);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you mean to remove this line?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that was intentional! createBlockOrderMap returns a map, but otherwise doesn't modify the xml argument. I had added this line early-on when the function also had a bunch of console.log statements so I could check that it was working as I expected. createBlockOrderMap only is meant to get called in cdoUtils.js > loadBlocksToWorkspace, which happens after domToBlockSpace is used to convert the XML to JSON.

@mikeharv mikeharv merged commit 392dfb0 into staging Jul 31, 2023
@mikeharv mikeharv deleted the mike/shareable-procedures-blocks branch July 31, 2023 19:34
sureshc added a commit that referenced this pull request Aug 2, 2023
* P20-317: Create unit tests for courses i18n sync-in

* Seed/serialize rubrics from levelbuilder to other environments (#52864)

* Serialize rubrics in script_json files

* Update tests given learning goal import

* Fix and add tests

* Fix test failures due to level being required

* Update comment

* [i18n-dev] update crontab

* Serialize self paced pl course offering (#52990)

* Removed self paced pl column and added self paced pl ID column with foreign key

* Removed dropped column from test

* Removed dropped column from summary methods

* Add association to self paced pl Id

* Fixed name error

* Changed to use belongs_to associatation

* Added self paced pl course offering id to test and summary methods

* Serialized self paced pl course offering id field

* Delete .yarn-integrity

* add nvm to PATH

* updating runtime method signature and machine ID setting to be more readable

* Add family name to manage students table (#52779)

* Add family name to manage students table

* Change text, add HelpTip

* Only show in non-PL sections

* Fix key issue; add test

* Remove unused string

* Remove unused styles

* Put everything behind the feature flag

* P20-318: Create unit tests for markdown i18n sync-in

* Make nil acceptable course offering editor (#53005)

* Removed self paced pl column and added self paced pl ID column with foreign key

* Removed dropped column from test

* Removed dropped column from summary methods

* Add association to self paced pl Id

* Fixed name error

* Changed to use belongs_to associatation

* Added self paced pl course offering id to test and summary methods

* Serialized self paced pl course offering id field

* Nil acceptable for professional learning

* Added nil acceptor for marketing initiative and curriculum type

* Ternary Operator

* Delete .yarn-integrity

* Changed to allow_nil

* Revert "adding 4 special certificates for Korea HoC"

* Update styling for dialog to accomodate different screen sizes (#52997)

* Update styling for dialog to accomodate different screen sizes

* Update styling based on feedback

* Reformat

* Fix hr display none

* Revert "Revert "[AI Chat] Add Open AI backend controller"" (#52977)

Revert "Revert "[AI Chat] Add Open AI backend controller""

* cleaning up syntax and adding comments

* Add family name to teacher panel (#53021)

* Added self paced pl dropdown list (#52999)

* Added self paced pl dropdown list

* Removed console.log

* Revert "P20-318: Create unit tests for markdown i18n sync-in"

This reverts commit c2d56a6.

* Updated cookbook versions

* Revert "Update Chef Client to 18.0.185"

* Updated cookbook versions

* levelbuilder content changes (-robo-commit)

* P20-318: Create unit tests for markdown i18n sync-in

* P20-318: Fix I18n::Resources::Apps::ExternalSourcesTest

* P20-316: Move copying of external oceans.json from in.sh

* P20-324: Create unit tests for scripts i18n sync-in

* updated crowdin upload success message in sync-up (#53044)

* [AI Chat] Update PanelContainer for general lab2 use (#53026)

[AI Chat] Update PanelContainer for general lab2 use

* Update rubrics editing page for Curriculum Writers (#52985)

* UI for Curriculum Writer Rubric experience

* modifying the link to the rubrics edit page

* added tests to files

* Modified tests to use shallow instead of mount

* appended disclaimer to embedded projects dialog

* levelbuilder content changes (-robo-commit)

* P20-328: Create unit tests for hourofcode i18n sync-in

* Update `aws-sdk-core` Gem to 3.180 (#53069)

* Publish Database Secrets to Match Updated Naming Convention (#50285)

* Add method that fetches current Stack Name

* Add method that fetches current Stack Name

* Add method that constructs path to stack-specific secret.

* Return  Secret path when not running on a system provisioned via CloudFormation.

* Use stack specific secret to set configuration setting if it exists.

* Temporarily comment out new logic to test on an adhoc.

* Temporarily remove / comment out new functionality.

* Fix missing require.

* Check stack-specific secret first and fallback to environment-type secret.

* Lookup stack-specific secret first, then fallback to environment-type secret.

* Update version of ActiveSupport installed in Chef environment to match the application.

* Handle use case when application is not deployed by a CloudFormation Stack.

* Try loading all the new gems that are needed now to initialize the CDO object.

* Try to avoid requiring lib/cdo/aws/cloud_formation when initializing the CDO object from the Chef execution environment.

* Remove unused Chef recipe that I accidentally added back when resolving a merge conflict.

* Remove experiment.

* Revert experiments.

* Switch from separate username/password configuration settings to a single credentials setting that contains both in the format expected by RDS Proxy.

* Add new `StackSecrets` Designation

And split up the existing WIP implementation of stack-aware secrets to
make a distinction between secrets that actually want to implement the
extra checks required for that awareness and secrets that we want to be
exclusively environment-specific and not stack-specific.

* Add new db_credential_ configuration setting to replace username/password settings.

* Refactor Secrets Config

Specifically, move a lot of functionality into the Secrets and StackSecrets classes themselves, and refactor them a bit to be slighty smarter about how they store their data.

* Change names of database credential secrets.

* Use Stack secret to populate database credentials.

* Switch db cluster id and endpoint config settings to be stack-specific secrets.

* Fix string interpolation syntax error.

* Start transition to new config naming convention.

* Check pick Aurora engine upgrade.

* Change cluster_id and endpoint secrets to be Stack-specific.

* Ensure that we set the Stack-specific path to lookup when eager-loading required Secrets during web application server initialization.

* Remove usage of CDO, since this might be invoked when initializing CDO. Speculatively increasing HTTP timeouts to resolve intermittent AWS client errors.

* Move stack name lookup to the SecretsConfig module to ensure that initializing CDO has as few dependencies as possible.

* Require Net:HTTP

* Explicitly set Region when initializing EC2 client.

* Update tests now that the stack name method is implemented within the SecretsConfig module.

* Wait until RDS Proxy has provisioned before starting to provision daemon and console EC2 Instances.

* Fix current_stack_name method.

* Fix invocation of stack_name method.

* Restore changes lost during resolution of merge conflict when bringing in refactoring of CDO.

* Fix invocation of class method and remove incorrect comment about CloudFormation.

* Stack-specific secrets functionality does not require fixing dependency on provisioning of the RDS Proxy.

* Reminding my self to fix this corner of the secrets lookup logic.

* Ensure that EC2 Instances do not start provisioning until the RDS Proxy is deployed.

* Stop using Chef cookbook logic to determine whether to use RDS Proxy to connect to the database.

* Add proxy writer and reader endpoint configuration settings.

* Publish RDS Proxy Writer & Reader Endpoints to Stack Secrets so they can populate CDO config settings in the future.

* Set value of config settings to be JSON objects, and not strings that happen to be JSON objects.

* Resume provisioning the db_cluster_id Stack secret.

* Set values of Secrets that populate configuration settings when an adhoc does not use an RDS database.

---------

Co-authored-by: Elijah Hamovitz <elijahhamovitz@gmail.com>

* Fix indentation and wrap JSON values in quotes. (#53078)

* Hard code writer and reader proxy endpoints in production with placeholder values. (#53084)

* levelbuilder content changes (-robo-commit)

* staging content changes (-robo-commit)

* Add beginning components for rubrics teacher experience (#53023)

* Very beginning of FAB button

* Rename/refactor component

* Move container style to scss file and add some structure

* Add the menu bar and move content to a new component

* Add test for RubricFloatingActionButton

* Undo changes to show the floating action button for now

* I18n-ize eventual user-facing string

* fixxed broken string (#53067)

* Update SETUP.md doc for Ubuntu using EC2 instance (#53048)

Update SETUP.md doc for Ubuntu using EC2 instance

* [AI Chat] Convert panelContainer to .tsx file (#53025)

[AI Chat] Convert panelContainer to .tsx file

* Add AI PL homepage and skinny banners (#52943)

* add DCDO flag

* update hero banner graphics and styles

* add announcements banner on teacher homepage

* add skinny banner on teach page

* move curriculum skinny banner on the homepage

* add homepage hero banner

* add comments

* update description copy

* Delete Pegasus type spec page (#53050)

* Replace symlink with actual file (#52998)

* Project Beats: make when run block undeletable and immovable (#53070)

* Authorization Server - JWKS endpoint (#52994)

- Add route and controller
- Add unit test
- Add `bin/generate-jwks` script  
- Add new jwks values to config files
- Add documentation at `docs/jwks.md`
- Push private key to AWS Secrets Manager

Signed-off-by: Nick Lathe <nick.lathe@code.org>

* collapse on press Escape (#53053)

* Fix bin/i18n tests

* etags updates

* pegasus i18n updates

* pegasus i18n markdown updates

* dashboard i18n updates - Arabic

* dashboard i18n updates - Azerbaijani

* dashboard i18n updates - Bulgarian

* dashboard i18n updates - Bengali

* dashboard i18n updates - Bosnian

* dashboard i18n updates - Catalan

* dashboard i18n updates - Corsican

* dashboard i18n updates - Czech

* dashboard i18n updates - Danish

* dashboard i18n updates - German

* dashboard i18n updates - Dhivehi

* dashboard i18n updates - Greek

* dashboard i18n updates - English, United Kingdom

* dashboard i18n updates - Spanish

* dashboard i18n updates - Spanish, Mexico

* dashboard i18n updates - Estonian

* dashboard i18n updates - Basque

* dashboard i18n updates - Dari

* dashboard i18n updates - Persian

* dashboard i18n updates - Finnish

* dashboard i18n updates - Filipino

* dashboard i18n updates - French

* dashboard i18n updates - Irish

* dashboard i18n updates - Galician

* dashboard i18n updates - Hawaiian

* dashboard i18n updates - Hebrew

* dashboard i18n updates - Hindi

* dashboard i18n updates - Croatian

* dashboard i18n updates - Hungarian

* dashboard i18n updates - Armenian

* dashboard i18n updates - Indonesian

* dashboard i18n updates - Icelandic

* dashboard i18n updates - Italian

* dashboard i18n updates - Japanese

* dashboard i18n updates - Georgian

* dashboard i18n updates - Kazakh

* dashboard i18n updates - Kannada

* dashboard i18n updates - Khmer

* dashboard i18n updates - Korean

* dashboard i18n updates - Kurdish

* dashboard i18n updates - Kyrgyz

* dashboard i18n updates - Lithuanian

* dashboard i18n updates - Latvian

* dashboard i18n updates - Maori

* dashboard i18n updates - Macedonian

* dashboard i18n updates - Mongolian

* dashboard i18n updates - Marathi

* dashboard i18n updates - Malay

* dashboard i18n updates - Maltese

* dashboard i18n updates - Burmese

* dashboard i18n updates - Nepali

* dashboard i18n updates - Dutch

* dashboard i18n updates - Norwegian Nynorsk

* dashboard i18n updates - Norwegian

* dashboard i18n updates - Polish

* dashboard i18n updates - Pashto

* dashboard i18n updates - Portuguese, Brazilian

* dashboard i18n updates - Portuguese

* dashboard i18n updates - Romanian

* dashboard i18n updates - Russian

* dashboard i18n updates - Northern Sami

* dashboard i18n updates - Samoan

* dashboard i18n updates - Sinhala

* dashboard i18n updates - Slovak

* dashboard i18n updates - Slovenian

* dashboard i18n updates - Albanian

* dashboard i18n updates - Serbian (Cyrillic)

* dashboard i18n updates - Swedish

* dashboard i18n updates - Tamil

* dashboard i18n updates - Telugu

* dashboard i18n updates - Tajik

* dashboard i18n updates - Thai

* dashboard i18n updates - Turkish

* dashboard i18n updates - Ukrainian

* dashboard i18n updates - Urdu (Pakistan)

* dashboard i18n updates - Uzbek

* dashboard i18n updates - Vietnamese

* dashboard i18n updates - Chinese Simplified

* dashboard i18n updates - Chinese Traditional

* dashboard i18n updates - Zulu

* apps i18n updates

* hoc i18n updates

* dashboard i18n sync

* apps i18n sync

* hoc i18n sync

* [Google Blockly] Shareable procedures blocks (#52932)

* add support for color overrides for button fields

* add shareable procedure block definitions

* register custom procedure blocks

* enabled modal function editor on google blockly levels

* register shareable procedure blocks in music lab, no svg frames

* bump to 1.2.10

* add serializer to wrapper

* sort definitions to front of block lists

* copy block array before sorting

* re-sort blocks before positioning

* Revert "re-sort blocks before positioning"

This reverts commit 4e206dd.

* reorder blocks before positioning

* add parameter to sort function

* reorganize functions

* add comments

* remove unnecessary unregistering

* revert remove unregister

was breaking unit tests

* add unit tests

* rename procedureDefinitionTypes

* specify any type for value option in button fields

* typo

* no-op for blocks without any inputs

* replace sort logic with partitioning

* remove extra copy

* remove DCDO flag (#53060)

* Music/Lab2: add start over dialog (#53065)

* Music/Lab2: add start over dialog

* PR feedback

* rename undo redo buttons

* Add course deprecation page (#52930)

* Make new course deprecation partial, add i18n strings, temporarily route 404 there for development

* Update image, styling, copy

* Correct button style, text color, link address

* Fix link, use remove nested button

* Move design system link button to application.css, clean up

* Clean up

* Use more semantic p tag

* Use readable class names locally (#53064)

* Sort By Family Name Dropdown (#53022)

* first draft of dropdown component

* switching to localStorage

* formatted correctly

* adding dcdo flag

* adding test file

* attempting tooltip, redux work

* simplifying to most basic version

* fixing test

* added a red disclaimer under the embed sharing option on app/game lab

* implemented syntax changes for cleaner code

* levelbuilder content changes (-robo-commit)

* Update copy on the hero banner for CSF and CSP pages (#53100)

* update copy on the hero banner for csf and csp pages

* remove test string name

* Add video field to course offering editor (#53056)

* Added self paced pl dropdown list

* Removed console.log

* Added video field selector to course offering editor

* Removed Id from summary and fixed props in test

* Fixed tests

* Fixed Spacing

* Remove setters/getters for value property for text areas (#53074)

* remove text area value

* add text prop

* multiline

* Revert to initial approach to displaying textarea content in editor

* Fix test

---------

Co-authored-by: Ubuntu <ubuntu@ip-10-0-0-55.ec2.internal>

* Music: start converting block definitions to TypeScript (#53098)

* used spread syntax

* factor out filter component (#53071)

* Revert "appended disclaimer to embedded projects dialog"

This reverts commit 249d74f.

* add quotes around field id string (#53118)

* Add published date field to course offering editor (#53077)

* Added self paced pl dropdown list

* Removed console.log

* Added video field selector to course offering editor

* Removed Id from summary and fixed props in test

* Fixed tests

* Added published date field to course offering editor

* Added Date Picker component

* Fixed Date Picker and added props to test

* Added clear button

* Styling

* Update Maker micro:bit PDF links - Summer 2023 (#53116)

* update course booklet PDF links

these are fetched from AWS

* update photo links

* deprecate old links

* levelbuilder content changes (-robo-commit)

* P20-75: Fix function_defenitions DE translations

* Update Scripts that Launch MySQL Command Line Client (#50763)

---------

Signed-off-by: Nick Lathe <nick.lathe@code.org>
Co-authored-by: Continuous Integration <dev@code.org>
Co-authored-by: Dmytro Antonyuk <137330041+dmantonyuk@users.noreply.github.com>
Co-authored-by: Artem Vavilov <11708250+artem-vavilov@users.noreply.github.com>
Co-authored-by: Artem Vavilov <artem.vavilov.7@gmail.com>
Co-authored-by: Bethany Connor <46464143+bethanyaconnor@users.noreply.github.com>
Co-authored-by: Erin Ferreirae <erin.ferreirae@code.org>
Co-authored-by: juanmanzojr <137838584+juanmanzojr@users.noreply.github.com>
Co-authored-by: Nick Lathe <nick.lathe@code.org>
Co-authored-by: Anna Xu <annaxu@wustl.edu>
Co-authored-by: Ryan Shipp <1382374+rshipp@users.noreply.github.com>
Co-authored-by: annaxuphoto <anna@code.org>
Co-authored-by: Meg Crenshaw <meg@code.org>
Co-authored-by: Vijaya Manohararaj <124813947+vijayamanohararaj@users.noreply.github.com>
Co-authored-by: fisher-alice <107423305+fisher-alice@users.noreply.github.com>
Co-authored-by: Elijah Hamovitz <elijahhamovitz@gmail.com>
Co-authored-by: Mario Gil Correa <66776217+mgc1194@users.noreply.github.com>
Co-authored-by: Kaitie O <kaitie@code.org>
Co-authored-by: Afifah Kashif <kashifafifah@gmail.com>
Co-authored-by: suresh <suresh@code.org>
Co-authored-by: Kelby Hawn <9256643+kelbyhawn@users.noreply.github.com>
Co-authored-by: bencodeorg <ben@code.org>
Co-authored-by: Sanchit Malhotra <85528507+sanchitmalhotra126@users.noreply.github.com>
Co-authored-by: Turner Riley <56283563+TurnerRiley@users.noreply.github.com>
Co-authored-by: Erin Ferreirae <131800576+elf-code@users.noreply.github.com>
Co-authored-by: Molly Moen <molly@code.org>
Co-authored-by: Mike Harvey <43474485+mikeharv@users.noreply.github.com>
Co-authored-by: Dayne <dayne@code.org>
Co-authored-by: Hannah Bergam <hannahbergam@gmail.com>
Co-authored-by: Ubuntu <ubuntu@ip-10-0-0-55.ec2.internal>
Co-authored-by: Brendan Reville <breville@users.noreply.github.com>
Co-authored-by: Afifah <31292421+AfifahK@users.noreply.github.com>
Co-authored-by: wilkie <david.wilkinson@code.org>
sureshc added a commit that referenced this pull request Aug 3, 2023
* P20-317: Create unit tests for courses i18n sync-in

* Seed/serialize rubrics from levelbuilder to other environments (#52864)

* Serialize rubrics in script_json files

* Update tests given learning goal import

* Fix and add tests

* Fix test failures due to level being required

* Update comment

* [i18n-dev] update crontab

* Serialize self paced pl course offering (#52990)

* Removed self paced pl column and added self paced pl ID column with foreign key

* Removed dropped column from test

* Removed dropped column from summary methods

* Add association to self paced pl Id

* Fixed name error

* Changed to use belongs_to associatation

* Added self paced pl course offering id to test and summary methods

* Serialized self paced pl course offering id field

* Delete .yarn-integrity

* add nvm to PATH

* updating runtime method signature and machine ID setting to be more readable

* Add family name to manage students table (#52779)

* Add family name to manage students table

* Change text, add HelpTip

* Only show in non-PL sections

* Fix key issue; add test

* Remove unused string

* Remove unused styles

* Put everything behind the feature flag

* P20-318: Create unit tests for markdown i18n sync-in

* Make nil acceptable course offering editor (#53005)

* Removed self paced pl column and added self paced pl ID column with foreign key

* Removed dropped column from test

* Removed dropped column from summary methods

* Add association to self paced pl Id

* Fixed name error

* Changed to use belongs_to associatation

* Added self paced pl course offering id to test and summary methods

* Serialized self paced pl course offering id field

* Nil acceptable for professional learning

* Added nil acceptor for marketing initiative and curriculum type

* Ternary Operator

* Delete .yarn-integrity

* Changed to allow_nil

* Revert "adding 4 special certificates for Korea HoC"

* Update styling for dialog to accomodate different screen sizes (#52997)

* Update styling for dialog to accomodate different screen sizes

* Update styling based on feedback

* Reformat

* Fix hr display none

* Revert "Revert "[AI Chat] Add Open AI backend controller"" (#52977)

Revert "Revert "[AI Chat] Add Open AI backend controller""

* cleaning up syntax and adding comments

* Add family name to teacher panel (#53021)

* Added self paced pl dropdown list (#52999)

* Added self paced pl dropdown list

* Removed console.log

* Revert "P20-318: Create unit tests for markdown i18n sync-in"

This reverts commit c2d56a6.

* Updated cookbook versions

* Revert "Update Chef Client to 18.0.185"

* Updated cookbook versions

* levelbuilder content changes (-robo-commit)

* P20-318: Create unit tests for markdown i18n sync-in

* P20-318: Fix I18n::Resources::Apps::ExternalSourcesTest

* P20-316: Move copying of external oceans.json from in.sh

* P20-324: Create unit tests for scripts i18n sync-in

* updated crowdin upload success message in sync-up (#53044)

* [AI Chat] Update PanelContainer for general lab2 use (#53026)

[AI Chat] Update PanelContainer for general lab2 use

* Update rubrics editing page for Curriculum Writers (#52985)

* UI for Curriculum Writer Rubric experience

* modifying the link to the rubrics edit page

* added tests to files

* Modified tests to use shallow instead of mount

* appended disclaimer to embedded projects dialog

* levelbuilder content changes (-robo-commit)

* P20-328: Create unit tests for hourofcode i18n sync-in

* Update `aws-sdk-core` Gem to 3.180 (#53069)

* Publish Database Secrets to Match Updated Naming Convention (#50285)

* Add method that fetches current Stack Name

* Add method that fetches current Stack Name

* Add method that constructs path to stack-specific secret.

* Return  Secret path when not running on a system provisioned via CloudFormation.

* Use stack specific secret to set configuration setting if it exists.

* Temporarily comment out new logic to test on an adhoc.

* Temporarily remove / comment out new functionality.

* Fix missing require.

* Check stack-specific secret first and fallback to environment-type secret.

* Lookup stack-specific secret first, then fallback to environment-type secret.

* Update version of ActiveSupport installed in Chef environment to match the application.

* Handle use case when application is not deployed by a CloudFormation Stack.

* Try loading all the new gems that are needed now to initialize the CDO object.

* Try to avoid requiring lib/cdo/aws/cloud_formation when initializing the CDO object from the Chef execution environment.

* Remove unused Chef recipe that I accidentally added back when resolving a merge conflict.

* Remove experiment.

* Revert experiments.

* Switch from separate username/password configuration settings to a single credentials setting that contains both in the format expected by RDS Proxy.

* Add new `StackSecrets` Designation

And split up the existing WIP implementation of stack-aware secrets to
make a distinction between secrets that actually want to implement the
extra checks required for that awareness and secrets that we want to be
exclusively environment-specific and not stack-specific.

* Add new db_credential_ configuration setting to replace username/password settings.

* Refactor Secrets Config

Specifically, move a lot of functionality into the Secrets and StackSecrets classes themselves, and refactor them a bit to be slighty smarter about how they store their data.

* Change names of database credential secrets.

* Use Stack secret to populate database credentials.

* Switch db cluster id and endpoint config settings to be stack-specific secrets.

* Fix string interpolation syntax error.

* Start transition to new config naming convention.

* Check pick Aurora engine upgrade.

* Change cluster_id and endpoint secrets to be Stack-specific.

* Ensure that we set the Stack-specific path to lookup when eager-loading required Secrets during web application server initialization.

* Remove usage of CDO, since this might be invoked when initializing CDO. Speculatively increasing HTTP timeouts to resolve intermittent AWS client errors.

* Move stack name lookup to the SecretsConfig module to ensure that initializing CDO has as few dependencies as possible.

* Require Net:HTTP

* Explicitly set Region when initializing EC2 client.

* Update tests now that the stack name method is implemented within the SecretsConfig module.

* Wait until RDS Proxy has provisioned before starting to provision daemon and console EC2 Instances.

* Fix current_stack_name method.

* Fix invocation of stack_name method.

* Restore changes lost during resolution of merge conflict when bringing in refactoring of CDO.

* Fix invocation of class method and remove incorrect comment about CloudFormation.

* Stack-specific secrets functionality does not require fixing dependency on provisioning of the RDS Proxy.

* Reminding my self to fix this corner of the secrets lookup logic.

* Ensure that EC2 Instances do not start provisioning until the RDS Proxy is deployed.

* Stop using Chef cookbook logic to determine whether to use RDS Proxy to connect to the database.

* Add proxy writer and reader endpoint configuration settings.

* Publish RDS Proxy Writer & Reader Endpoints to Stack Secrets so they can populate CDO config settings in the future.

* Set value of config settings to be JSON objects, and not strings that happen to be JSON objects.

* Resume provisioning the db_cluster_id Stack secret.

* Set values of Secrets that populate configuration settings when an adhoc does not use an RDS database.

---------

Co-authored-by: Elijah Hamovitz <elijahhamovitz@gmail.com>

* Fix indentation and wrap JSON values in quotes. (#53078)

* Hard code writer and reader proxy endpoints in production with placeholder values. (#53084)

* levelbuilder content changes (-robo-commit)

* staging content changes (-robo-commit)

* Add beginning components for rubrics teacher experience (#53023)

* Very beginning of FAB button

* Rename/refactor component

* Move container style to scss file and add some structure

* Add the menu bar and move content to a new component

* Add test for RubricFloatingActionButton

* Undo changes to show the floating action button for now

* I18n-ize eventual user-facing string

* fixxed broken string (#53067)

* Update SETUP.md doc for Ubuntu using EC2 instance (#53048)

Update SETUP.md doc for Ubuntu using EC2 instance

* [AI Chat] Convert panelContainer to .tsx file (#53025)

[AI Chat] Convert panelContainer to .tsx file

* Add AI PL homepage and skinny banners (#52943)

* add DCDO flag

* update hero banner graphics and styles

* add announcements banner on teacher homepage

* add skinny banner on teach page

* move curriculum skinny banner on the homepage

* add homepage hero banner

* add comments

* update description copy

* Delete Pegasus type spec page (#53050)

* Replace symlink with actual file (#52998)

* Project Beats: make when run block undeletable and immovable (#53070)

* Authorization Server - JWKS endpoint (#52994)

- Add route and controller
- Add unit test
- Add `bin/generate-jwks` script  
- Add new jwks values to config files
- Add documentation at `docs/jwks.md`
- Push private key to AWS Secrets Manager

Signed-off-by: Nick Lathe <nick.lathe@code.org>

* collapse on press Escape (#53053)

* Fix bin/i18n tests

* etags updates

* pegasus i18n updates

* pegasus i18n markdown updates

* dashboard i18n updates - Arabic

* dashboard i18n updates - Azerbaijani

* dashboard i18n updates - Bulgarian

* dashboard i18n updates - Bengali

* dashboard i18n updates - Bosnian

* dashboard i18n updates - Catalan

* dashboard i18n updates - Corsican

* dashboard i18n updates - Czech

* dashboard i18n updates - Danish

* dashboard i18n updates - German

* dashboard i18n updates - Dhivehi

* dashboard i18n updates - Greek

* dashboard i18n updates - English, United Kingdom

* dashboard i18n updates - Spanish

* dashboard i18n updates - Spanish, Mexico

* dashboard i18n updates - Estonian

* dashboard i18n updates - Basque

* dashboard i18n updates - Dari

* dashboard i18n updates - Persian

* dashboard i18n updates - Finnish

* dashboard i18n updates - Filipino

* dashboard i18n updates - French

* dashboard i18n updates - Irish

* dashboard i18n updates - Galician

* dashboard i18n updates - Hawaiian

* dashboard i18n updates - Hebrew

* dashboard i18n updates - Hindi

* dashboard i18n updates - Croatian

* dashboard i18n updates - Hungarian

* dashboard i18n updates - Armenian

* dashboard i18n updates - Indonesian

* dashboard i18n updates - Icelandic

* dashboard i18n updates - Italian

* dashboard i18n updates - Japanese

* dashboard i18n updates - Georgian

* dashboard i18n updates - Kazakh

* dashboard i18n updates - Kannada

* dashboard i18n updates - Khmer

* dashboard i18n updates - Korean

* dashboard i18n updates - Kurdish

* dashboard i18n updates - Kyrgyz

* dashboard i18n updates - Lithuanian

* dashboard i18n updates - Latvian

* dashboard i18n updates - Maori

* dashboard i18n updates - Macedonian

* dashboard i18n updates - Mongolian

* dashboard i18n updates - Marathi

* dashboard i18n updates - Malay

* dashboard i18n updates - Maltese

* dashboard i18n updates - Burmese

* dashboard i18n updates - Nepali

* dashboard i18n updates - Dutch

* dashboard i18n updates - Norwegian Nynorsk

* dashboard i18n updates - Norwegian

* dashboard i18n updates - Polish

* dashboard i18n updates - Pashto

* dashboard i18n updates - Portuguese, Brazilian

* dashboard i18n updates - Portuguese

* dashboard i18n updates - Romanian

* dashboard i18n updates - Russian

* dashboard i18n updates - Northern Sami

* dashboard i18n updates - Samoan

* dashboard i18n updates - Sinhala

* dashboard i18n updates - Slovak

* dashboard i18n updates - Slovenian

* dashboard i18n updates - Albanian

* dashboard i18n updates - Serbian (Cyrillic)

* dashboard i18n updates - Swedish

* dashboard i18n updates - Tamil

* dashboard i18n updates - Telugu

* dashboard i18n updates - Tajik

* dashboard i18n updates - Thai

* dashboard i18n updates - Turkish

* dashboard i18n updates - Ukrainian

* dashboard i18n updates - Urdu (Pakistan)

* dashboard i18n updates - Uzbek

* dashboard i18n updates - Vietnamese

* dashboard i18n updates - Chinese Simplified

* dashboard i18n updates - Chinese Traditional

* dashboard i18n updates - Zulu

* apps i18n updates

* hoc i18n updates

* dashboard i18n sync

* apps i18n sync

* hoc i18n sync

* [Google Blockly] Shareable procedures blocks (#52932)

* add support for color overrides for button fields

* add shareable procedure block definitions

* register custom procedure blocks

* enabled modal function editor on google blockly levels

* register shareable procedure blocks in music lab, no svg frames

* bump to 1.2.10

* add serializer to wrapper

* sort definitions to front of block lists

* copy block array before sorting

* re-sort blocks before positioning

* Revert "re-sort blocks before positioning"

This reverts commit 4e206dd.

* reorder blocks before positioning

* add parameter to sort function

* reorganize functions

* add comments

* remove unnecessary unregistering

* revert remove unregister

was breaking unit tests

* add unit tests

* rename procedureDefinitionTypes

* specify any type for value option in button fields

* typo

* no-op for blocks without any inputs

* replace sort logic with partitioning

* remove extra copy

* remove DCDO flag (#53060)

* Music/Lab2: add start over dialog (#53065)

* Music/Lab2: add start over dialog

* PR feedback

* rename undo redo buttons

* Add course deprecation page (#52930)

* Make new course deprecation partial, add i18n strings, temporarily route 404 there for development

* Update image, styling, copy

* Correct button style, text color, link address

* Fix link, use remove nested button

* Move design system link button to application.css, clean up

* Clean up

* Use more semantic p tag

* Use readable class names locally (#53064)

* Sort By Family Name Dropdown (#53022)

* first draft of dropdown component

* switching to localStorage

* formatted correctly

* adding dcdo flag

* adding test file

* attempting tooltip, redux work

* simplifying to most basic version

* fixing test

* added a red disclaimer under the embed sharing option on app/game lab

* implemented syntax changes for cleaner code

* levelbuilder content changes (-robo-commit)

* Update copy on the hero banner for CSF and CSP pages (#53100)

* update copy on the hero banner for csf and csp pages

* remove test string name

* Add video field to course offering editor (#53056)

* Added self paced pl dropdown list

* Removed console.log

* Added video field selector to course offering editor

* Removed Id from summary and fixed props in test

* Fixed tests

* Fixed Spacing

* Remove setters/getters for value property for text areas (#53074)

* remove text area value

* add text prop

* multiline

* Revert to initial approach to displaying textarea content in editor

* Fix test

---------

Co-authored-by: Ubuntu <ubuntu@ip-10-0-0-55.ec2.internal>

* Music: start converting block definitions to TypeScript (#53098)

* used spread syntax

* factor out filter component (#53071)

* Revert "appended disclaimer to embedded projects dialog"

This reverts commit 249d74f.

* add quotes around field id string (#53118)

* Add published date field to course offering editor (#53077)

* Added self paced pl dropdown list

* Removed console.log

* Added video field selector to course offering editor

* Removed Id from summary and fixed props in test

* Fixed tests

* Added published date field to course offering editor

* Added Date Picker component

* Fixed Date Picker and added props to test

* Added clear button

* Styling

* Update Maker micro:bit PDF links - Summer 2023 (#53116)

* update course booklet PDF links

these are fetched from AWS

* update photo links

* deprecate old links

* levelbuilder content changes (-robo-commit)

* P20-75: Fix function_defenitions DE translations

* Update Scripts that Launch MySQL Command Line Client (#50763)

---------

Signed-off-by: Nick Lathe <nick.lathe@code.org>
Co-authored-by: Continuous Integration <dev@code.org>
Co-authored-by: Dmytro Antonyuk <137330041+dmantonyuk@users.noreply.github.com>
Co-authored-by: Artem Vavilov <11708250+artem-vavilov@users.noreply.github.com>
Co-authored-by: Artem Vavilov <artem.vavilov.7@gmail.com>
Co-authored-by: Bethany Connor <46464143+bethanyaconnor@users.noreply.github.com>
Co-authored-by: Erin Ferreirae <erin.ferreirae@code.org>
Co-authored-by: juanmanzojr <137838584+juanmanzojr@users.noreply.github.com>
Co-authored-by: Nick Lathe <nick.lathe@code.org>
Co-authored-by: Anna Xu <annaxu@wustl.edu>
Co-authored-by: Ryan Shipp <1382374+rshipp@users.noreply.github.com>
Co-authored-by: annaxuphoto <anna@code.org>
Co-authored-by: Meg Crenshaw <meg@code.org>
Co-authored-by: Vijaya Manohararaj <124813947+vijayamanohararaj@users.noreply.github.com>
Co-authored-by: fisher-alice <107423305+fisher-alice@users.noreply.github.com>
Co-authored-by: Elijah Hamovitz <elijahhamovitz@gmail.com>
Co-authored-by: Mario Gil Correa <66776217+mgc1194@users.noreply.github.com>
Co-authored-by: Kaitie O <kaitie@code.org>
Co-authored-by: Afifah Kashif <kashifafifah@gmail.com>
Co-authored-by: Kelby Hawn <9256643+kelbyhawn@users.noreply.github.com>
Co-authored-by: bencodeorg <ben@code.org>
Co-authored-by: Sanchit Malhotra <85528507+sanchitmalhotra126@users.noreply.github.com>
Co-authored-by: Turner Riley <56283563+TurnerRiley@users.noreply.github.com>
Co-authored-by: Erin Ferreirae <131800576+elf-code@users.noreply.github.com>
Co-authored-by: Molly Moen <molly@code.org>
Co-authored-by: Mike Harvey <43474485+mikeharv@users.noreply.github.com>
Co-authored-by: Dayne <dayne@code.org>
Co-authored-by: Hannah Bergam <hannahbergam@gmail.com>
Co-authored-by: Ubuntu <ubuntu@ip-10-0-0-55.ec2.internal>
Co-authored-by: Brendan Reville <breville@users.noreply.github.com>
Co-authored-by: Afifah <31292421+AfifahK@users.noreply.github.com>
Co-authored-by: wilkie <david.wilkinson@code.org>
snickell pushed a commit that referenced this pull request Feb 3, 2024
* P20-317: Create unit tests for courses i18n sync-in

* Seed/serialize rubrics from levelbuilder to other environments (#52864)

* Serialize rubrics in script_json files

* Update tests given learning goal import

* Fix and add tests

* Fix test failures due to level being required

* Update comment

* [i18n-dev] update crontab

* Serialize self paced pl course offering (#52990)

* Removed self paced pl column and added self paced pl ID column with foreign key

* Removed dropped column from test

* Removed dropped column from summary methods

* Add association to self paced pl Id

* Fixed name error

* Changed to use belongs_to associatation

* Added self paced pl course offering id to test and summary methods

* Serialized self paced pl course offering id field

* Delete .yarn-integrity

* add nvm to PATH

* updating runtime method signature and machine ID setting to be more readable

* Add family name to manage students table (#52779)

* Add family name to manage students table

* Change text, add HelpTip

* Only show in non-PL sections

* Fix key issue; add test

* Remove unused string

* Remove unused styles

* Put everything behind the feature flag

* P20-318: Create unit tests for markdown i18n sync-in

* Make nil acceptable course offering editor (#53005)

* Removed self paced pl column and added self paced pl ID column with foreign key

* Removed dropped column from test

* Removed dropped column from summary methods

* Add association to self paced pl Id

* Fixed name error

* Changed to use belongs_to associatation

* Added self paced pl course offering id to test and summary methods

* Serialized self paced pl course offering id field

* Nil acceptable for professional learning

* Added nil acceptor for marketing initiative and curriculum type

* Ternary Operator

* Delete .yarn-integrity

* Changed to allow_nil

* Revert "adding 4 special certificates for Korea HoC"

* Update styling for dialog to accomodate different screen sizes (#52997)

* Update styling for dialog to accomodate different screen sizes

* Update styling based on feedback

* Reformat

* Fix hr display none

* Revert "Revert "[AI Chat] Add Open AI backend controller"" (#52977)

Revert "Revert "[AI Chat] Add Open AI backend controller""

* cleaning up syntax and adding comments

* Add family name to teacher panel (#53021)

* Added self paced pl dropdown list (#52999)

* Added self paced pl dropdown list

* Removed console.log

* Revert "P20-318: Create unit tests for markdown i18n sync-in"

This reverts commit c2d56a6.

* Updated cookbook versions

* Revert "Update Chef Client to 18.0.185"

* Updated cookbook versions

* levelbuilder content changes (-robo-commit)

* P20-318: Create unit tests for markdown i18n sync-in

* P20-318: Fix I18n::Resources::Apps::ExternalSourcesTest

* P20-316: Move copying of external oceans.json from in.sh

* P20-324: Create unit tests for scripts i18n sync-in

* updated crowdin upload success message in sync-up (#53044)

* [AI Chat] Update PanelContainer for general lab2 use (#53026)

[AI Chat] Update PanelContainer for general lab2 use

* Update rubrics editing page for Curriculum Writers (#52985)

* UI for Curriculum Writer Rubric experience

* modifying the link to the rubrics edit page

* added tests to files

* Modified tests to use shallow instead of mount

* appended disclaimer to embedded projects dialog

* levelbuilder content changes (-robo-commit)

* P20-328: Create unit tests for hourofcode i18n sync-in

* Update `aws-sdk-core` Gem to 3.180 (#53069)

* Publish Database Secrets to Match Updated Naming Convention (#50285)

* Add method that fetches current Stack Name

* Add method that fetches current Stack Name

* Add method that constructs path to stack-specific secret.

* Return  Secret path when not running on a system provisioned via CloudFormation.

* Use stack specific secret to set configuration setting if it exists.

* Temporarily comment out new logic to test on an adhoc.

* Temporarily remove / comment out new functionality.

* Fix missing require.

* Check stack-specific secret first and fallback to environment-type secret.

* Lookup stack-specific secret first, then fallback to environment-type secret.

* Update version of ActiveSupport installed in Chef environment to match the application.

* Handle use case when application is not deployed by a CloudFormation Stack.

* Try loading all the new gems that are needed now to initialize the CDO object.

* Try to avoid requiring lib/cdo/aws/cloud_formation when initializing the CDO object from the Chef execution environment.

* Remove unused Chef recipe that I accidentally added back when resolving a merge conflict.

* Remove experiment.

* Revert experiments.

* Switch from separate username/password configuration settings to a single credentials setting that contains both in the format expected by RDS Proxy.

* Add new `StackSecrets` Designation

And split up the existing WIP implementation of stack-aware secrets to
make a distinction between secrets that actually want to implement the
extra checks required for that awareness and secrets that we want to be
exclusively environment-specific and not stack-specific.

* Add new db_credential_ configuration setting to replace username/password settings.

* Refactor Secrets Config

Specifically, move a lot of functionality into the Secrets and StackSecrets classes themselves, and refactor them a bit to be slighty smarter about how they store their data.

* Change names of database credential secrets.

* Use Stack secret to populate database credentials.

* Switch db cluster id and endpoint config settings to be stack-specific secrets.

* Fix string interpolation syntax error.

* Start transition to new config naming convention.

* Check pick Aurora engine upgrade.

* Change cluster_id and endpoint secrets to be Stack-specific.

* Ensure that we set the Stack-specific path to lookup when eager-loading required Secrets during web application server initialization.

* Remove usage of CDO, since this might be invoked when initializing CDO. Speculatively increasing HTTP timeouts to resolve intermittent AWS client errors.

* Move stack name lookup to the SecretsConfig module to ensure that initializing CDO has as few dependencies as possible.

* Require Net:HTTP

* Explicitly set Region when initializing EC2 client.

* Update tests now that the stack name method is implemented within the SecretsConfig module.

* Wait until RDS Proxy has provisioned before starting to provision daemon and console EC2 Instances.

* Fix current_stack_name method.

* Fix invocation of stack_name method.

* Restore changes lost during resolution of merge conflict when bringing in refactoring of CDO.

* Fix invocation of class method and remove incorrect comment about CloudFormation.

* Stack-specific secrets functionality does not require fixing dependency on provisioning of the RDS Proxy.

* Reminding my self to fix this corner of the secrets lookup logic.

* Ensure that EC2 Instances do not start provisioning until the RDS Proxy is deployed.

* Stop using Chef cookbook logic to determine whether to use RDS Proxy to connect to the database.

* Add proxy writer and reader endpoint configuration settings.

* Publish RDS Proxy Writer & Reader Endpoints to Stack Secrets so they can populate CDO config settings in the future.

* Set value of config settings to be JSON objects, and not strings that happen to be JSON objects.

* Resume provisioning the db_cluster_id Stack secret.

* Set values of Secrets that populate configuration settings when an adhoc does not use an RDS database.

---------

Co-authored-by: Elijah Hamovitz <elijahhamovitz@gmail.com>

* Fix indentation and wrap JSON values in quotes. (#53078)

* Hard code writer and reader proxy endpoints in production with placeholder values. (#53084)

* levelbuilder content changes (-robo-commit)

* staging content changes (-robo-commit)

* Add beginning components for rubrics teacher experience (#53023)

* Very beginning of FAB button

* Rename/refactor component

* Move container style to scss file and add some structure

* Add the menu bar and move content to a new component

* Add test for RubricFloatingActionButton

* Undo changes to show the floating action button for now

* I18n-ize eventual user-facing string

* fixxed broken string (#53067)

* Update SETUP.md doc for Ubuntu using EC2 instance (#53048)

Update SETUP.md doc for Ubuntu using EC2 instance

* [AI Chat] Convert panelContainer to .tsx file (#53025)

[AI Chat] Convert panelContainer to .tsx file

* Add AI PL homepage and skinny banners (#52943)

* add DCDO flag

* update hero banner graphics and styles

* add announcements banner on teacher homepage

* add skinny banner on teach page

* move curriculum skinny banner on the homepage

* add homepage hero banner

* add comments

* update description copy

* Delete Pegasus type spec page (#53050)

* Replace symlink with actual file (#52998)

* Project Beats: make when run block undeletable and immovable (#53070)

* Authorization Server - JWKS endpoint (#52994)

- Add route and controller
- Add unit test
- Add `bin/generate-jwks` script  
- Add new jwks values to config files
- Add documentation at `docs/jwks.md`
- Push private key to AWS Secrets Manager

Signed-off-by: Nick Lathe <nick.lathe@code.org>

* collapse on press Escape (#53053)

* Fix bin/i18n tests

* etags updates

* pegasus i18n updates

* pegasus i18n markdown updates

* dashboard i18n updates - Arabic

* dashboard i18n updates - Azerbaijani

* dashboard i18n updates - Bulgarian

* dashboard i18n updates - Bengali

* dashboard i18n updates - Bosnian

* dashboard i18n updates - Catalan

* dashboard i18n updates - Corsican

* dashboard i18n updates - Czech

* dashboard i18n updates - Danish

* dashboard i18n updates - German

* dashboard i18n updates - Dhivehi

* dashboard i18n updates - Greek

* dashboard i18n updates - English, United Kingdom

* dashboard i18n updates - Spanish

* dashboard i18n updates - Spanish, Mexico

* dashboard i18n updates - Estonian

* dashboard i18n updates - Basque

* dashboard i18n updates - Dari

* dashboard i18n updates - Persian

* dashboard i18n updates - Finnish

* dashboard i18n updates - Filipino

* dashboard i18n updates - French

* dashboard i18n updates - Irish

* dashboard i18n updates - Galician

* dashboard i18n updates - Hawaiian

* dashboard i18n updates - Hebrew

* dashboard i18n updates - Hindi

* dashboard i18n updates - Croatian

* dashboard i18n updates - Hungarian

* dashboard i18n updates - Armenian

* dashboard i18n updates - Indonesian

* dashboard i18n updates - Icelandic

* dashboard i18n updates - Italian

* dashboard i18n updates - Japanese

* dashboard i18n updates - Georgian

* dashboard i18n updates - Kazakh

* dashboard i18n updates - Kannada

* dashboard i18n updates - Khmer

* dashboard i18n updates - Korean

* dashboard i18n updates - Kurdish

* dashboard i18n updates - Kyrgyz

* dashboard i18n updates - Lithuanian

* dashboard i18n updates - Latvian

* dashboard i18n updates - Maori

* dashboard i18n updates - Macedonian

* dashboard i18n updates - Mongolian

* dashboard i18n updates - Marathi

* dashboard i18n updates - Malay

* dashboard i18n updates - Maltese

* dashboard i18n updates - Burmese

* dashboard i18n updates - Nepali

* dashboard i18n updates - Dutch

* dashboard i18n updates - Norwegian Nynorsk

* dashboard i18n updates - Norwegian

* dashboard i18n updates - Polish

* dashboard i18n updates - Pashto

* dashboard i18n updates - Portuguese, Brazilian

* dashboard i18n updates - Portuguese

* dashboard i18n updates - Romanian

* dashboard i18n updates - Russian

* dashboard i18n updates - Northern Sami

* dashboard i18n updates - Samoan

* dashboard i18n updates - Sinhala

* dashboard i18n updates - Slovak

* dashboard i18n updates - Slovenian

* dashboard i18n updates - Albanian

* dashboard i18n updates - Serbian (Cyrillic)

* dashboard i18n updates - Swedish

* dashboard i18n updates - Tamil

* dashboard i18n updates - Telugu

* dashboard i18n updates - Tajik

* dashboard i18n updates - Thai

* dashboard i18n updates - Turkish

* dashboard i18n updates - Ukrainian

* dashboard i18n updates - Urdu (Pakistan)

* dashboard i18n updates - Uzbek

* dashboard i18n updates - Vietnamese

* dashboard i18n updates - Chinese Simplified

* dashboard i18n updates - Chinese Traditional

* dashboard i18n updates - Zulu

* apps i18n updates

* hoc i18n updates

* dashboard i18n sync

* apps i18n sync

* hoc i18n sync

* [Google Blockly] Shareable procedures blocks (#52932)

* add support for color overrides for button fields

* add shareable procedure block definitions

* register custom procedure blocks

* enabled modal function editor on google blockly levels

* register shareable procedure blocks in music lab, no svg frames

* bump to 1.2.10

* add serializer to wrapper

* sort definitions to front of block lists

* copy block array before sorting

* re-sort blocks before positioning

* Revert "re-sort blocks before positioning"

This reverts commit 4e206dd.

* reorder blocks before positioning

* add parameter to sort function

* reorganize functions

* add comments

* remove unnecessary unregistering

* revert remove unregister

was breaking unit tests

* add unit tests

* rename procedureDefinitionTypes

* specify any type for value option in button fields

* typo

* no-op for blocks without any inputs

* replace sort logic with partitioning

* remove extra copy

* remove DCDO flag (#53060)

* Music/Lab2: add start over dialog (#53065)

* Music/Lab2: add start over dialog

* PR feedback

* rename undo redo buttons

* Add course deprecation page (#52930)

* Make new course deprecation partial, add i18n strings, temporarily route 404 there for development

* Update image, styling, copy

* Correct button style, text color, link address

* Fix link, use remove nested button

* Move design system link button to application.css, clean up

* Clean up

* Use more semantic p tag

* Use readable class names locally (#53064)

* Sort By Family Name Dropdown (#53022)

* first draft of dropdown component

* switching to localStorage

* formatted correctly

* adding dcdo flag

* adding test file

* attempting tooltip, redux work

* simplifying to most basic version

* fixing test

* added a red disclaimer under the embed sharing option on app/game lab

* implemented syntax changes for cleaner code

* levelbuilder content changes (-robo-commit)

* Update copy on the hero banner for CSF and CSP pages (#53100)

* update copy on the hero banner for csf and csp pages

* remove test string name

* Add video field to course offering editor (#53056)

* Added self paced pl dropdown list

* Removed console.log

* Added video field selector to course offering editor

* Removed Id from summary and fixed props in test

* Fixed tests

* Fixed Spacing

* Remove setters/getters for value property for text areas (#53074)

* remove text area value

* add text prop

* multiline

* Revert to initial approach to displaying textarea content in editor

* Fix test

---------

Co-authored-by: Ubuntu <ubuntu@ip-10-0-0-55.ec2.internal>

* Music: start converting block definitions to TypeScript (#53098)

* used spread syntax

* factor out filter component (#53071)

* Revert "appended disclaimer to embedded projects dialog"

This reverts commit 249d74f.

* add quotes around field id string (#53118)

* Add published date field to course offering editor (#53077)

* Added self paced pl dropdown list

* Removed console.log

* Added video field selector to course offering editor

* Removed Id from summary and fixed props in test

* Fixed tests

* Added published date field to course offering editor

* Added Date Picker component

* Fixed Date Picker and added props to test

* Added clear button

* Styling

* Update Maker micro:bit PDF links - Summer 2023 (#53116)

* update course booklet PDF links

these are fetched from AWS

* update photo links

* deprecate old links

* levelbuilder content changes (-robo-commit)

* P20-75: Fix function_defenitions DE translations

* Update Scripts that Launch MySQL Command Line Client (#50763)

---------

Signed-off-by: Nick Lathe <nick.lathe@code.org>
Co-authored-by: Continuous Integration <dev@code.org>
Co-authored-by: Dmytro Antonyuk <137330041+dmantonyuk@users.noreply.github.com>
Co-authored-by: Artem Vavilov <11708250+artem-vavilov@users.noreply.github.com>
Co-authored-by: Artem Vavilov <artem.vavilov.7@gmail.com>
Co-authored-by: Bethany Connor <46464143+bethanyaconnor@users.noreply.github.com>
Co-authored-by: Erin Ferreirae <erin.ferreirae@code.org>
Co-authored-by: juanmanzojr <137838584+juanmanzojr@users.noreply.github.com>
Co-authored-by: Nick Lathe <nick.lathe@code.org>
Co-authored-by: Anna Xu <annaxu@wustl.edu>
Co-authored-by: Ryan Shipp <1382374+rshipp@users.noreply.github.com>
Co-authored-by: annaxuphoto <anna@code.org>
Co-authored-by: Meg Crenshaw <meg@code.org>
Co-authored-by: Vijaya Manohararaj <124813947+vijayamanohararaj@users.noreply.github.com>
Co-authored-by: fisher-alice <107423305+fisher-alice@users.noreply.github.com>
Co-authored-by: Elijah Hamovitz <elijahhamovitz@gmail.com>
Co-authored-by: Mario Gil Correa <66776217+mgc1194@users.noreply.github.com>
Co-authored-by: Kaitie O <kaitie@code.org>
Co-authored-by: Afifah Kashif <kashifafifah@gmail.com>
Co-authored-by: suresh <suresh@code.org>
Co-authored-by: Kelby Hawn <9256643+kelbyhawn@users.noreply.github.com>
Co-authored-by: bencodeorg <ben@code.org>
Co-authored-by: Sanchit Malhotra <85528507+sanchitmalhotra126@users.noreply.github.com>
Co-authored-by: Turner Riley <56283563+TurnerRiley@users.noreply.github.com>
Co-authored-by: Erin Ferreirae <131800576+elf-code@users.noreply.github.com>
Co-authored-by: Molly Moen <molly@code.org>
Co-authored-by: Mike Harvey <43474485+mikeharv@users.noreply.github.com>
Co-authored-by: Dayne <dayne@code.org>
Co-authored-by: Hannah Bergam <hannahbergam@gmail.com>
Co-authored-by: Ubuntu <ubuntu@ip-10-0-0-55.ec2.internal>
Co-authored-by: Brendan Reville <breville@users.noreply.github.com>
Co-authored-by: Afifah <31292421+AfifahK@users.noreply.github.com>
Co-authored-by: wilkie <david.wilkinson@code.org>
snickell pushed a commit that referenced this pull request Feb 3, 2024
* P20-317: Create unit tests for courses i18n sync-in

* Seed/serialize rubrics from levelbuilder to other environments (#52864)

* Serialize rubrics in script_json files

* Update tests given learning goal import

* Fix and add tests

* Fix test failures due to level being required

* Update comment

* [i18n-dev] update crontab

* Serialize self paced pl course offering (#52990)

* Removed self paced pl column and added self paced pl ID column with foreign key

* Removed dropped column from test

* Removed dropped column from summary methods

* Add association to self paced pl Id

* Fixed name error

* Changed to use belongs_to associatation

* Added self paced pl course offering id to test and summary methods

* Serialized self paced pl course offering id field

* Delete .yarn-integrity

* add nvm to PATH

* updating runtime method signature and machine ID setting to be more readable

* Add family name to manage students table (#52779)

* Add family name to manage students table

* Change text, add HelpTip

* Only show in non-PL sections

* Fix key issue; add test

* Remove unused string

* Remove unused styles

* Put everything behind the feature flag

* P20-318: Create unit tests for markdown i18n sync-in

* Make nil acceptable course offering editor (#53005)

* Removed self paced pl column and added self paced pl ID column with foreign key

* Removed dropped column from test

* Removed dropped column from summary methods

* Add association to self paced pl Id

* Fixed name error

* Changed to use belongs_to associatation

* Added self paced pl course offering id to test and summary methods

* Serialized self paced pl course offering id field

* Nil acceptable for professional learning

* Added nil acceptor for marketing initiative and curriculum type

* Ternary Operator

* Delete .yarn-integrity

* Changed to allow_nil

* Revert "adding 4 special certificates for Korea HoC"

* Update styling for dialog to accomodate different screen sizes (#52997)

* Update styling for dialog to accomodate different screen sizes

* Update styling based on feedback

* Reformat

* Fix hr display none

* Revert "Revert "[AI Chat] Add Open AI backend controller"" (#52977)

Revert "Revert "[AI Chat] Add Open AI backend controller""

* cleaning up syntax and adding comments

* Add family name to teacher panel (#53021)

* Added self paced pl dropdown list (#52999)

* Added self paced pl dropdown list

* Removed console.log

* Revert "P20-318: Create unit tests for markdown i18n sync-in"

This reverts commit c2d56a6.

* Updated cookbook versions

* Revert "Update Chef Client to 18.0.185"

* Updated cookbook versions

* levelbuilder content changes (-robo-commit)

* P20-318: Create unit tests for markdown i18n sync-in

* P20-318: Fix I18n::Resources::Apps::ExternalSourcesTest

* P20-316: Move copying of external oceans.json from in.sh

* P20-324: Create unit tests for scripts i18n sync-in

* updated crowdin upload success message in sync-up (#53044)

* [AI Chat] Update PanelContainer for general lab2 use (#53026)

[AI Chat] Update PanelContainer for general lab2 use

* Update rubrics editing page for Curriculum Writers (#52985)

* UI for Curriculum Writer Rubric experience

* modifying the link to the rubrics edit page

* added tests to files

* Modified tests to use shallow instead of mount

* appended disclaimer to embedded projects dialog

* levelbuilder content changes (-robo-commit)

* P20-328: Create unit tests for hourofcode i18n sync-in

* Update `aws-sdk-core` Gem to 3.180 (#53069)

* Publish Database Secrets to Match Updated Naming Convention (#50285)

* Add method that fetches current Stack Name

* Add method that fetches current Stack Name

* Add method that constructs path to stack-specific secret.

* Return  Secret path when not running on a system provisioned via CloudFormation.

* Use stack specific secret to set configuration setting if it exists.

* Temporarily comment out new logic to test on an adhoc.

* Temporarily remove / comment out new functionality.

* Fix missing require.

* Check stack-specific secret first and fallback to environment-type secret.

* Lookup stack-specific secret first, then fallback to environment-type secret.

* Update version of ActiveSupport installed in Chef environment to match the application.

* Handle use case when application is not deployed by a CloudFormation Stack.

* Try loading all the new gems that are needed now to initialize the CDO object.

* Try to avoid requiring lib/cdo/aws/cloud_formation when initializing the CDO object from the Chef execution environment.

* Remove unused Chef recipe that I accidentally added back when resolving a merge conflict.

* Remove experiment.

* Revert experiments.

* Switch from separate username/password configuration settings to a single credentials setting that contains both in the format expected by RDS Proxy.

* Add new `StackSecrets` Designation

And split up the existing WIP implementation of stack-aware secrets to
make a distinction between secrets that actually want to implement the
extra checks required for that awareness and secrets that we want to be
exclusively environment-specific and not stack-specific.

* Add new db_credential_ configuration setting to replace username/password settings.

* Refactor Secrets Config

Specifically, move a lot of functionality into the Secrets and StackSecrets classes themselves, and refactor them a bit to be slighty smarter about how they store their data.

* Change names of database credential secrets.

* Use Stack secret to populate database credentials.

* Switch db cluster id and endpoint config settings to be stack-specific secrets.

* Fix string interpolation syntax error.

* Start transition to new config naming convention.

* Check pick Aurora engine upgrade.

* Change cluster_id and endpoint secrets to be Stack-specific.

* Ensure that we set the Stack-specific path to lookup when eager-loading required Secrets during web application server initialization.

* Remove usage of CDO, since this might be invoked when initializing CDO. Speculatively increasing HTTP timeouts to resolve intermittent AWS client errors.

* Move stack name lookup to the SecretsConfig module to ensure that initializing CDO has as few dependencies as possible.

* Require Net:HTTP

* Explicitly set Region when initializing EC2 client.

* Update tests now that the stack name method is implemented within the SecretsConfig module.

* Wait until RDS Proxy has provisioned before starting to provision daemon and console EC2 Instances.

* Fix current_stack_name method.

* Fix invocation of stack_name method.

* Restore changes lost during resolution of merge conflict when bringing in refactoring of CDO.

* Fix invocation of class method and remove incorrect comment about CloudFormation.

* Stack-specific secrets functionality does not require fixing dependency on provisioning of the RDS Proxy.

* Reminding my self to fix this corner of the secrets lookup logic.

* Ensure that EC2 Instances do not start provisioning until the RDS Proxy is deployed.

* Stop using Chef cookbook logic to determine whether to use RDS Proxy to connect to the database.

* Add proxy writer and reader endpoint configuration settings.

* Publish RDS Proxy Writer & Reader Endpoints to Stack Secrets so they can populate CDO config settings in the future.

* Set value of config settings to be JSON objects, and not strings that happen to be JSON objects.

* Resume provisioning the db_cluster_id Stack secret.

* Set values of Secrets that populate configuration settings when an adhoc does not use an RDS database.

---------

Co-authored-by: Elijah Hamovitz <elijahhamovitz@gmail.com>

* Fix indentation and wrap JSON values in quotes. (#53078)

* Hard code writer and reader proxy endpoints in production with placeholder values. (#53084)

* levelbuilder content changes (-robo-commit)

* staging content changes (-robo-commit)

* Add beginning components for rubrics teacher experience (#53023)

* Very beginning of FAB button

* Rename/refactor component

* Move container style to scss file and add some structure

* Add the menu bar and move content to a new component

* Add test for RubricFloatingActionButton

* Undo changes to show the floating action button for now

* I18n-ize eventual user-facing string

* fixxed broken string (#53067)

* Update SETUP.md doc for Ubuntu using EC2 instance (#53048)

Update SETUP.md doc for Ubuntu using EC2 instance

* [AI Chat] Convert panelContainer to .tsx file (#53025)

[AI Chat] Convert panelContainer to .tsx file

* Add AI PL homepage and skinny banners (#52943)

* add DCDO flag

* update hero banner graphics and styles

* add announcements banner on teacher homepage

* add skinny banner on teach page

* move curriculum skinny banner on the homepage

* add homepage hero banner

* add comments

* update description copy

* Delete Pegasus type spec page (#53050)

* Replace symlink with actual file (#52998)

* Project Beats: make when run block undeletable and immovable (#53070)

* Authorization Server - JWKS endpoint (#52994)

- Add route and controller
- Add unit test
- Add `bin/generate-jwks` script  
- Add new jwks values to config files
- Add documentation at `docs/jwks.md`
- Push private key to AWS Secrets Manager

Signed-off-by: Nick Lathe <nick.lathe@code.org>

* collapse on press Escape (#53053)

* Fix bin/i18n tests

* etags updates

* pegasus i18n updates

* pegasus i18n markdown updates

* dashboard i18n updates - Arabic

* dashboard i18n updates - Azerbaijani

* dashboard i18n updates - Bulgarian

* dashboard i18n updates - Bengali

* dashboard i18n updates - Bosnian

* dashboard i18n updates - Catalan

* dashboard i18n updates - Corsican

* dashboard i18n updates - Czech

* dashboard i18n updates - Danish

* dashboard i18n updates - German

* dashboard i18n updates - Dhivehi

* dashboard i18n updates - Greek

* dashboard i18n updates - English, United Kingdom

* dashboard i18n updates - Spanish

* dashboard i18n updates - Spanish, Mexico

* dashboard i18n updates - Estonian

* dashboard i18n updates - Basque

* dashboard i18n updates - Dari

* dashboard i18n updates - Persian

* dashboard i18n updates - Finnish

* dashboard i18n updates - Filipino

* dashboard i18n updates - French

* dashboard i18n updates - Irish

* dashboard i18n updates - Galician

* dashboard i18n updates - Hawaiian

* dashboard i18n updates - Hebrew

* dashboard i18n updates - Hindi

* dashboard i18n updates - Croatian

* dashboard i18n updates - Hungarian

* dashboard i18n updates - Armenian

* dashboard i18n updates - Indonesian

* dashboard i18n updates - Icelandic

* dashboard i18n updates - Italian

* dashboard i18n updates - Japanese

* dashboard i18n updates - Georgian

* dashboard i18n updates - Kazakh

* dashboard i18n updates - Kannada

* dashboard i18n updates - Khmer

* dashboard i18n updates - Korean

* dashboard i18n updates - Kurdish

* dashboard i18n updates - Kyrgyz

* dashboard i18n updates - Lithuanian

* dashboard i18n updates - Latvian

* dashboard i18n updates - Maori

* dashboard i18n updates - Macedonian

* dashboard i18n updates - Mongolian

* dashboard i18n updates - Marathi

* dashboard i18n updates - Malay

* dashboard i18n updates - Maltese

* dashboard i18n updates - Burmese

* dashboard i18n updates - Nepali

* dashboard i18n updates - Dutch

* dashboard i18n updates - Norwegian Nynorsk

* dashboard i18n updates - Norwegian

* dashboard i18n updates - Polish

* dashboard i18n updates - Pashto

* dashboard i18n updates - Portuguese, Brazilian

* dashboard i18n updates - Portuguese

* dashboard i18n updates - Romanian

* dashboard i18n updates - Russian

* dashboard i18n updates - Northern Sami

* dashboard i18n updates - Samoan

* dashboard i18n updates - Sinhala

* dashboard i18n updates - Slovak

* dashboard i18n updates - Slovenian

* dashboard i18n updates - Albanian

* dashboard i18n updates - Serbian (Cyrillic)

* dashboard i18n updates - Swedish

* dashboard i18n updates - Tamil

* dashboard i18n updates - Telugu

* dashboard i18n updates - Tajik

* dashboard i18n updates - Thai

* dashboard i18n updates - Turkish

* dashboard i18n updates - Ukrainian

* dashboard i18n updates - Urdu (Pakistan)

* dashboard i18n updates - Uzbek

* dashboard i18n updates - Vietnamese

* dashboard i18n updates - Chinese Simplified

* dashboard i18n updates - Chinese Traditional

* dashboard i18n updates - Zulu

* apps i18n updates

* hoc i18n updates

* dashboard i18n sync

* apps i18n sync

* hoc i18n sync

* [Google Blockly] Shareable procedures blocks (#52932)

* add support for color overrides for button fields

* add shareable procedure block definitions

* register custom procedure blocks

* enabled modal function editor on google blockly levels

* register shareable procedure blocks in music lab, no svg frames

* bump to 1.2.10

* add serializer to wrapper

* sort definitions to front of block lists

* copy block array before sorting

* re-sort blocks before positioning

* Revert "re-sort blocks before positioning"

This reverts commit 4e206dd.

* reorder blocks before positioning

* add parameter to sort function

* reorganize functions

* add comments

* remove unnecessary unregistering

* revert remove unregister

was breaking unit tests

* add unit tests

* rename procedureDefinitionTypes

* specify any type for value option in button fields

* typo

* no-op for blocks without any inputs

* replace sort logic with partitioning

* remove extra copy

* remove DCDO flag (#53060)

* Music/Lab2: add start over dialog (#53065)

* Music/Lab2: add start over dialog

* PR feedback

* rename undo redo buttons

* Add course deprecation page (#52930)

* Make new course deprecation partial, add i18n strings, temporarily route 404 there for development

* Update image, styling, copy

* Correct button style, text color, link address

* Fix link, use remove nested button

* Move design system link button to application.css, clean up

* Clean up

* Use more semantic p tag

* Use readable class names locally (#53064)

* Sort By Family Name Dropdown (#53022)

* first draft of dropdown component

* switching to localStorage

* formatted correctly

* adding dcdo flag

* adding test file

* attempting tooltip, redux work

* simplifying to most basic version

* fixing test

* added a red disclaimer under the embed sharing option on app/game lab

* implemented syntax changes for cleaner code

* levelbuilder content changes (-robo-commit)

* Update copy on the hero banner for CSF and CSP pages (#53100)

* update copy on the hero banner for csf and csp pages

* remove test string name

* Add video field to course offering editor (#53056)

* Added self paced pl dropdown list

* Removed console.log

* Added video field selector to course offering editor

* Removed Id from summary and fixed props in test

* Fixed tests

* Fixed Spacing

* Remove setters/getters for value property for text areas (#53074)

* remove text area value

* add text prop

* multiline

* Revert to initial approach to displaying textarea content in editor

* Fix test

---------

Co-authored-by: Ubuntu <ubuntu@ip-10-0-0-55.ec2.internal>

* Music: start converting block definitions to TypeScript (#53098)

* used spread syntax

* factor out filter component (#53071)

* Revert "appended disclaimer to embedded projects dialog"

This reverts commit 249d74f.

* add quotes around field id string (#53118)

* Add published date field to course offering editor (#53077)

* Added self paced pl dropdown list

* Removed console.log

* Added video field selector to course offering editor

* Removed Id from summary and fixed props in test

* Fixed tests

* Added published date field to course offering editor

* Added Date Picker component

* Fixed Date Picker and added props to test

* Added clear button

* Styling

* Update Maker micro:bit PDF links - Summer 2023 (#53116)

* update course booklet PDF links

these are fetched from AWS

* update photo links

* deprecate old links

* levelbuilder content changes (-robo-commit)

* P20-75: Fix function_defenitions DE translations

* Update Scripts that Launch MySQL Command Line Client (#50763)

---------

Signed-off-by: Nick Lathe <nick.lathe@code.org>
Co-authored-by: Continuous Integration <dev@code.org>
Co-authored-by: Dmytro Antonyuk <137330041+dmantonyuk@users.noreply.github.com>
Co-authored-by: Artem Vavilov <11708250+artem-vavilov@users.noreply.github.com>
Co-authored-by: Artem Vavilov <artem.vavilov.7@gmail.com>
Co-authored-by: Bethany Connor <46464143+bethanyaconnor@users.noreply.github.com>
Co-authored-by: Erin Ferreirae <erin.ferreirae@code.org>
Co-authored-by: juanmanzojr <137838584+juanmanzojr@users.noreply.github.com>
Co-authored-by: Nick Lathe <nick.lathe@code.org>
Co-authored-by: Anna Xu <annaxu@wustl.edu>
Co-authored-by: Ryan Shipp <1382374+rshipp@users.noreply.github.com>
Co-authored-by: annaxuphoto <anna@code.org>
Co-authored-by: Meg Crenshaw <meg@code.org>
Co-authored-by: Vijaya Manohararaj <124813947+vijayamanohararaj@users.noreply.github.com>
Co-authored-by: fisher-alice <107423305+fisher-alice@users.noreply.github.com>
Co-authored-by: Elijah Hamovitz <elijahhamovitz@gmail.com>
Co-authored-by: Mario Gil Correa <66776217+mgc1194@users.noreply.github.com>
Co-authored-by: Kaitie O <kaitie@code.org>
Co-authored-by: Afifah Kashif <kashifafifah@gmail.com>
Co-authored-by: Kelby Hawn <9256643+kelbyhawn@users.noreply.github.com>
Co-authored-by: bencodeorg <ben@code.org>
Co-authored-by: Sanchit Malhotra <85528507+sanchitmalhotra126@users.noreply.github.com>
Co-authored-by: Turner Riley <56283563+TurnerRiley@users.noreply.github.com>
Co-authored-by: Erin Ferreirae <131800576+elf-code@users.noreply.github.com>
Co-authored-by: Molly Moen <molly@code.org>
Co-authored-by: Mike Harvey <43474485+mikeharv@users.noreply.github.com>
Co-authored-by: Dayne <dayne@code.org>
Co-authored-by: Hannah Bergam <hannahbergam@gmail.com>
Co-authored-by: Ubuntu <ubuntu@ip-10-0-0-55.ec2.internal>
Co-authored-by: Brendan Reville <breville@users.noreply.github.com>
Co-authored-by: Afifah <31292421+AfifahK@users.noreply.github.com>
Co-authored-by: wilkie <david.wilkinson@code.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants