| ... | ... | @@ -3,17 +3,15 @@ |
|
|
|
- [Data file Directory Structure](#data-file-directory-structure)
|
|
|
|
- [Change Management Workflow](#change-management-workflow)
|
|
|
|
- [WORK-ROLE and SPECIALIZATIONS JSON files](#work-roles-and-specializations-json-files)
|
|
|
|
- [PROF (proficiency) JSON file](#prof-json-file)
|
|
|
|
- [Rel-Link JSON file](#rel-link-json-file)
|
|
|
|
- [Pipeline Workflow](#pipeline-workflow)
|
|
|
|
- [TRN EVL Pipeline In-Depth](#trn-evl-pipeline-in-depth)
|
|
|
|
- [Pipeline Overview](#pipeline-overview)
|
|
|
|
|
|
|
|
# Introduction
|
|
|
|
|
|
|
|
This repository design is for the automation of training and evaluation requirements, traceability, and metrics. Below are the requirements of our organization's Master Training Tasks List (MTTL).
|
|
|
|
|
|
|
|
1. Must contain all necessary Knowledge, Skills, Abilities, and Tasks (KSA&Ts) for the organizations work roles/specializations
|
|
|
|
2. We must be able to link every KSA&T to "one or many" work roles/specializations
|
|
|
|
1. Must contain all necessary Knowledge, Skills, Abilities, and Tasks (KSA&Ts) for the organization's work roles
|
|
|
|
2. We must be able to link every KSA&T to "one or many" work roles
|
|
|
|
3. The proficiency of each KSA&T as they relate to their respective work role/specialization.
|
|
|
|
4. Should be able to trace the training required to accomplish a specific KSA&T at a specific proficiency level
|
|
|
|
5. Should be able to trace the evaluation material to accomplish a specific KSA&T at a specific proficiency level
|
| ... | ... | @@ -38,10 +36,17 @@ MTTL Repo |
|
|
|
│ ├─ SKILLS.json
|
|
|
|
│ ├─ ABILTIES.json
|
|
|
|
│ └─ TASKS.json
|
|
|
|
├─ work-roles
|
|
|
|
│ ├─ training
|
|
|
|
│ | └─ *.rel-links.json
|
|
|
|
│ └─ eval
|
|
|
|
│ └─ *.rel-links.json
|
|
|
|
├─ work-roles
|
|
|
|
│ └─ *.json
|
|
|
|
├─ .gitlab-ci.yml
|
|
|
|
├─ CODEOWNERS
|
|
|
|
├─ WORK-ROLES.json
|
|
|
|
├─ SPECIALIZATIONS.json
|
|
|
|
└─ PROF.json
|
|
|
|
└─ SPECIALIZATIONS.json
|
|
|
|
```
|
|
|
|
|
|
|
|
## Change Management Workflow
|
| ... | ... | @@ -69,102 +74,56 @@ Field Information |
|
|
|
- "courses": a list of course names and links to those courses that must be completed to obtain this work role
|
|
|
|
- "lessons": a list of lessons in this course along with a link to the lesson
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"WR_SPEC_ID": {
|
|
|
|
"courses":[
|
|
|
|
{
|
|
|
|
"name": "COURSE_NAME",
|
|
|
|
"url": "http://course.url.com/course"
|
|
|
|
"lessons": [
|
|
|
|
{
|
|
|
|
"name": "LESSON 1",
|
|
|
|
"url": "lesson.url.com"
|
|
|
|
},
|
|
|
|
...
|
|
|
|
]
|
|
|
|
},
|
|
|
|
...
|
|
|
|
],
|
|
|
|
"trn-rel-link-urls": [],
|
|
|
|
"evl-rel-link-urls": [],
|
|
|
|
"follow-ons": [
|
|
|
|
"WR_SPEC_ID",
|
|
|
|
...
|
|
|
|
]
|
|
|
|
},
|
|
|
|
...
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## PROF JSON File
|
|
|
|
|
|
|
|
This section describes the PROF.json file. This is a necessary file for relating multiple proficiency sources across different organizations. This will enable the MTTL to be compiled with different proficiency codes if an organization requires it.
|
|
|
|
|
|
|
|
Field Information
|
|
|
|
- "PROF_ID": will be a single proficiency identifier that the 90COS uses internally
|
|
|
|
- The rest will be the proficiency source and the proficiency code that source uses the is indicative of the 90th's internal code
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"PROF_ID": {
|
|
|
|
"JCT&CS": "",
|
|
|
|
"ACC": "",
|
|
|
|
...
|
|
|
|
},
|
|
|
|
...
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Rel-Link JSON File
|
|
|
|
|
|
|
|
This section describes the *.rel-link.json file; rel is short for relation. There will be many of these files inside the training/eval repositories that will describe what KSAT and proficiency the actual material adheres to. There will be a job in the training or evaluation repository that will join these files into a single artifact. When the MTTL repository is linked to one of these repositories, it will fetch the joined artifact file and map the "training/eval" fields in the KSAT files (as long as the KSAT_IDs are correct). These fields will then be used for metrics.
|
|
|
|
|
|
|
|
The job that will join your *.rel-link.json files will be provided to you and is described in the [TRN EVL Pipeline In-Depth](#trn-evl-pipeline-in-depth) section. Below is a template for the separated *.rel-link.json files that will be present in your repository.
|
|
|
|
|
|
|
|
On the job training (OJT) can also be specified in your material repo using a file named *obj*.rel-link.json (just make sure 'ojt' is somewhere in the name). All KSATs specified here will automatically be mapped to the 'eval' list with the name of 'OJT'.
|
|
|
|
|
|
|
|
NOTE: Think about how you want to maintain this information as the material evolves. You can use as many of these files to link requirements to your material as you need. For example, if you choose to use a single *.rel-link.json file, you will need to update this single file every time the material changes.
|
|
|
|
|
|
|
|
Field Information
|
|
|
|
- "TRN_EVL_ID": this will be an identifier of the training or evaluation that this material is a part of. NOTE: this ID should be the same ID used in the TRN.json or EVL.json respectively.
|
|
|
|
- "NETWORK": this will be a string specifying the network a member will need to be on to view this material. Example, 'Commercial', 'NIPR', 'TAZ', etc.
|
|
|
|
- "KSATs": will be a list of lists. Each list will contain the KSAT_ID, PROF_ID the material is taught at.
|
|
|
|
|
|
|
|
NOTE: the name of the *.rel-link.json file should be indicative of the material it represents and will be used in the linking process.
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"TRN_EVL_ID": "",
|
|
|
|
"NETWORK": "",
|
|
|
|
"KSATs": [
|
|
|
|
["KSAT_ID", "PROF_ID"],
|
|
|
|
...
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Pipeline Workflow
|
|
|
|
## Rel-Links JSON File
|
|
|
|
|
|
|
|
This section describes the *.rel-link.json file; rel is short for relation. There will be many of these files inside the 'rel-links' folder that will describe what KSAT and proficiency actual training/evaluation material adheres to. These file will be used in the pipeline to create metrics and visualization for the MTTL.
|
|
|
|
|
|
|
|
Eval required Field Information
|
|
|
|
- "test_id": work-role id that this question adheres to
|
|
|
|
- "test_type": either knowledge or performance
|
|
|
|
- "question_id": unique question id (can be anything)
|
|
|
|
- "question_name": actual question name, should be the same as the folder that the question exists in
|
|
|
|
- "topic": topic of the question
|
|
|
|
- "network": network where the test will be administered
|
|
|
|
- "language": programming language for the question
|
|
|
|
- "work-roles": this is an array of work-role id strings
|
|
|
|
- "KSATs": an array of KSAT mappings for this material
|
|
|
|
- "map_for": either 'training' or 'eval'
|
|
|
|
|
|
|
|
Training required Field Information
|
|
|
|
- "course": the course for this training rel-link
|
|
|
|
- "module": the module of the associated rel-link
|
|
|
|
- "topic": the topic of the rel-link
|
|
|
|
- "subject": the subject of the rel-link
|
|
|
|
- "KSATs": an array of KSAT mappings for this material
|
|
|
|
- "network": network where the test will be administered
|
|
|
|
- "work-roles": this is an array of work-role id strings
|
|
|
|
- "topic_path": relative path from the root of the material repo
|
|
|
|
- "map_for": either 'training' or 'eval'
|
|
|
|
|
|
|
|
## Pipeline Overview
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
graph TD;
|
|
|
|
START-->STAGE_VALIDATE[Stage: Validate]
|
|
|
|
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_docs([Docs])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_K([Knowledge])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_S([Skills])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_A([Abilities])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_T([Tasks])
|
|
|
|
STAGE_VALIDATE-- Job -->INSERT_REL_LINKS([Rel-Links])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_WR_SPEC([KSAT Work-Roles/Specs])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_CHILDREN([KSAT Children])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_TRN_REL_LINKS([Training Rel-Links])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_EVL_REL_LINKS([Eval Rel-Links])
|
|
|
|
STAGE_VALIDATE-- Job -->VALIDATE_WORK_ROLES([Work-Roles])
|
|
|
|
|
|
|
|
VALIDATE_docs-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
VALIDATE_K-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
VALIDATE_S-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
VALIDATE_A-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
VALIDATE_T-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
VALIDATE_WR_SPEC-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
INSERT_REL_LINKS-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
VALIDATE_CHILDREN-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
VALIDATE_TRN_REL_LINKS-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
VALIDATE_EVL_REL_LINKS-->STAGE_PRE_BUILD[Stage: Pre-Build]
|
|
|
|
|
|
|
|
STAGE_PRE_BUILD-- Job -->PRE_BUILD_PREP([Build Prep])
|
|
|
|
|
| ... | ... | @@ -174,38 +133,31 @@ graph TD; |
|
|
|
STAGE_BUILD-- Job -->BUILD_TTL([TTL Dataset])
|
|
|
|
STAGE_BUILD-- Job -->BUILD_EXTRAS([Extra Datasets])
|
|
|
|
STAGE_BUILD-- Job -->BUILD_METRICS([MTTL Metrics])
|
|
|
|
STAGE_BUILD-- Job -->BUILD_ROADMAP([Roadmap])
|
|
|
|
STAGE_BUILD-- Job -->BUILD_Docs([Docs])
|
|
|
|
|
|
|
|
BUILD_MTTL-->STAGE_TEST[Stage: Test]
|
|
|
|
BUILD_TTL-->STAGE_TEST[Stage: Test]
|
|
|
|
BUILD_EXTRAS-->STAGE_TEST[Stage: Test]
|
|
|
|
BUILD_METRICS-->STAGE_TEST[Stage: Test]
|
|
|
|
BUILD_ROADMAP-->STAGE_TEST[Stage: Test]
|
|
|
|
BUILD_Docs-->STAGE_TEST[Stage: Test]
|
|
|
|
|
|
|
|
STAGE_TEST-- Job -->TEST_DUPS([Test Duplicate KSATs])
|
|
|
|
STAGE_TEST-- Job -->TEST_DUPS([Test Identical KSATs])
|
|
|
|
STAGE_TEST-- Job -->TEST_FIND([Test MTTL find])
|
|
|
|
STAGE_TEST-- Job -->TEST_INSERT([Test MTTL insert])
|
|
|
|
STAGE_TEST-- Job -->TEST_MODIFY([Test MTTL modify])
|
|
|
|
STAGE_TEST-- Job -->TEST_DELETE([Test MTTL delete])
|
|
|
|
STAGE_TEST-- Job -->TEST_PAGES([Test Pages])
|
|
|
|
|
|
|
|
TEST_DUPS-->STAGE_DEPLOY[Stage: Deploy]
|
|
|
|
TEST_FIND-->STAGE_DEPLOY[Stage: Deploy]
|
|
|
|
TEST_INSERT-->STAGE_DEPLOY[Stage: Deploy]
|
|
|
|
TEST_MODIFY-->STAGE_DEPLOY[Stage: Deploy]
|
|
|
|
TEST_DELETE-->STAGE_DEPLOY[Stage: Deploy]
|
|
|
|
TEST_PAGES-->STAGE_DEPLOY[Stage: Deploy]
|
|
|
|
|
|
|
|
STAGE_DEPLOY-- Job -->DEPLOY_PAGES([Deploy to GitLab Static Pages])
|
|
|
|
|
|
|
|
DEPLOY_PAGES-->FINISH>User can see MTTL changes]
|
|
|
|
``` |
|
|
\ No newline at end of file |
|
|
|
|
|
|
|
## TRN EVL Pipeline In-Depth
|
|
|
|
|
|
|
|
A single job is provided to you that is used to create artifacts for the MTTL repository; they are described below.
|
|
|
|
1. The **SaveJson** job. This job is responsible for joining the ```*.rel-link.json``` files together into a single artifact. This artifact will contain more fields than the ones specified in the [Rel-Link JSON file](#rel-link-json-file) section. These fields include, ```'REL_PATH'```, and ```'NAME'```.
|
|
|
|
- Add the following to your gitlab CI/CD ```.gitlab-ci.yml``` pipeline definition file and the ```data.rel-link.json``` artifact be automatically created.
|
|
|
|
|
|
|
|
```yml
|
|
|
|
SaveJsons:
|
|
|
|
stage: deploy
|
|
|
|
image: 90cos/generic_cyt_ci
|
|
|
|
script:
|
|
|
|
- git clone https://gitlab.com/90COS/public/scripts.git
|
|
|
|
- python3 scripts/gen_mttl_metric_data.py
|
|
|
|
artifacts:
|
|
|
|
paths:
|
|
|
|
- data.rel-link.json
|
|
|
|
only:
|
|
|
|
- master
|
|
|
|
```
|
|
|
|
* Note: To see full functionality, use the script's --help option. |
|
|
\ No newline at end of file |