diff --git a/README-fr.md b/README-fr.md index 00a6488aead86d5875a73844cc6d7bc09a7e6e96..3bcc661cf8fae7e4f448664cea10d16b4f657e08 100644 --- a/README-fr.md +++ b/README-fr.md @@ -68,6 +68,7 @@ Chaque fonctionnalité testée peut être activée avec une variable `MGCI_TEST_ | `MGCI_TEST_REGISTRY_GENERIC` | Lancement du test du registre de paquets génériques | `false` | | `MGCI_TEST_REGISTRY_CONTAINER` | Lancement du test du registre des conteneurs | `false` | | `MGCI_TEST_RUNNERS_TAGS` | Lancement du test des tags de runner | `false` | +| `MGCI_TEST_CICD_VARIABLES` | Lancement du test des variables CI/CD | `false` | | `MGCI_RUNNERS_TAGS` | Liste des Tags de runners à tester, format | `` | | `MGCI_API_TOKEN` | Token d'accès `Owner` au dépôt pour tester l'API | `` | | `MATTERMOST_URL` | URL de l'instance Mattermost à tester | `` | @@ -225,6 +226,7 @@ MGCI_TEST_CACHE_JOB_TAGS=cache - [x] Health check (uniquement disponible pour une instance auto-hébergée) - [X] Mattermost : Health check - [X] Environnement : création et destruction +- [x] CI/CD Variables ### 🏗️ À venir @@ -311,6 +313,12 @@ Si vous activez ce test, il faut également créer la variable `MATTERMOST_URL`, - **Nom des jobs** : `runners:register` - **Description** : le job `runners:register` teste la fonctionnalité d'enregistrement et de suppression d'un runner. Il va enregistrer un runner pour le projet avec le tag `test-runner` puis le supprimer tout de suite après. +## Test des variables CI/CD + +- **Nom du fichier** : `templates/cicd_variables.yml` +- **Nom des jobs** : `vars:init` et `vars:test` +- **Description** : le job `vars:init` crée les 3 variables CI/CD à tester (`MGCI_TEST_VISIBLE_VARIABLE`, `MGCI_TEST_MASKED_VARIABLE` et `MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE`) si elles n'existent pas. le job `vars:test` teste l'intégrité des valeurs des variables CI/CD. + ## Contribuer Ce projet étant sous la licence [GPL3](https://www.gnu.org/licenses/gpl.html), il est possible d'y contribuer pour y apporter des améliorations, des nouvelles fonctionnalités. diff --git a/README.md b/README.md index 762386d164ebf5331fee70c02725f9853fa0cea6..fc833c0e897be336fff631d8e5685138620c2178 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ Each tested feature can be activated with a `MGCI_TEST_` variable that | `MGCI_TEST_REGISTRY_GENERIC` | Run the generic packages registry test | `false` | | `MGCI_TEST_REGISTRY_CONTAINER` | Run the container registry test | `false` | | `MGCI_TEST_RUNNERS_TAGS` | Run the runner tags test | `false` | +| `MGCI_TEST_CICD_VARIABLES` | Run the CI/CD variables test | `false` | | `MGCI_RUNNERS_TAGS` | List of runner tags to test, format | `` | | `MGCI_API_TOKEN` | `Owner` access token to the repository for API testing | `` | | `MATTERMOST_URL` | URL of the Mattermost instance to test | `` | @@ -224,6 +225,7 @@ MGCI_TEST_CACHE_JOB_TAGS=cache - [x] Health check (only available for self-hosted Gitlab) - [x] Mattermost: Health check - [x] Environment: creation and deletion +- [x] CI/CD Variables ### 🏗️ Upcoming @@ -312,6 +314,12 @@ If you enable this test, you also need to create the `MATTERMOST_URL` variable, - **Job names**: `runners:register` - **Description**: the `runners:register` job tests the functionality of registering and deleting a runner. It will register a runner for the project with the `test-runner` tag and then delete it immediately after. +## CI/CD Variables Tests + +- **File name**: `templates/cicd_variables.yml` +- **Job names**: `vars:init` and `vars:test` +- **Description**: the `vars:init` job creates the 3 types of CI/CD that we want to test (`MGCI_TEST_VISIBLE_VARIABLE`, `MGCI_TEST_MASKED_VARIABLE` and `MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE`). The `vars:test` job tests the values of said CI/CD variables. + ## Contributing This project is licensed under [GPL3](https://www.gnu.org/licenses/gpl.html), and contributions are welcome to bring improvements, new features, etc. diff --git a/includes-if/tags/cicd_variables.yml b/includes-if/tags/cicd_variables.yml new file mode 100644 index 0000000000000000000000000000000000000000..c771d0333418e6f2c216a9c768b77a295ba85580 --- /dev/null +++ b/includes-if/tags/cicd_variables.yml @@ -0,0 +1,3 @@ +--- +.git: + tags: [$MGCI_TEST_CICD_VARIABLES] \ No newline at end of file diff --git a/templates/bases/variables.yml b/templates/bases/variables.yml index 9326897de92d78c258df6bd6b75b1f162ac3b338..e4ea5093b10678b23cae68ad9643b956627d6afa 100644 --- a/templates/bases/variables.yml +++ b/templates/bases/variables.yml @@ -34,3 +34,4 @@ variables: MGCI_TEST_REGISTRY_NPM: "false" MGCI_TEST_REGISTRY_GENERIC: "false" MGCI_TEST_REGISTRY_CONTAINER: "false" + MGCI_TEST_CICD_VARIABLES: "false" diff --git a/templates/cicd_variables.yml b/templates/cicd_variables.yml new file mode 100644 index 0000000000000000000000000000000000000000..1451cf226c75a33e4686bbd29704198ad574fc45 --- /dev/null +++ b/templates/cicd_variables.yml @@ -0,0 +1,65 @@ +--- + +.vars: + variables: + MGCI_VARIABLE_TEST_VALUE: "Waltz_bad_nymph_for_quick_jigs_vex_1234567890.:@_+-=./~" + rules: + - if: $MGCI_TEST_VARIABLES == "true" && ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_PROJECT_PATH == 'froggit/tools/mgci') + + +vars:init: + extends: .vars + stage: start + before_script: | + if [ -z ${MGCI_API_TOKEN+x} ]; then + echo "MGCI_API_TOKEN is unset" + false + fi + script: | + if [[ -z ${MGCI_TEST_VISIBLE_VARIABLE} ]]; then + echo "MGCI_TEST_VISIBLE_VARIABLE is unset" + curl --write-out %{http_code} --silent --request POST --header "PRIVATE-TOKEN:${MGCI_API_TOKEN}" \ + "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/variables" --form "key=MGCI_TEST_VISIBLE_VARIABLE" --form "value=${MGCI_VARIABLE_TEST_VALUE}" + fi + if [[ -z ${MGCI_TEST_MASKED_VARIABLE} ]]; then + echo "MGCI_TEST_MASKED_VARIABLE is unset" + curl --write-out %{http_code} --silent --request POST --header "PRIVATE-TOKEN:${MGCI_API_TOKEN}" \ + "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/variables" --form "key=MGCI_TEST_MASKED_VARIABLE" --form "value=${MGCI_VARIABLE_TEST_VALUE}" \ + --form "masked=true" + fi + if [[ -z ${MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE} ]]; then + echo "MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE is unset" + curl --write-out %{http_code} --silent --request POST --header "PRIVATE-TOKEN:${MGCI_API_TOKEN}" \ + "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/variables" --form "key=MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE" --form "value=${MGCI_VARIABLE_TEST_VALUE}" \ + --form "masked_and_hidden=true" + fi + echo "MGCI_TEST_* variables created" + rules: + - if: $MGCI_TEST_VISIBLE_VARIABLE == null + - if: $MGCI_TEST_MASKED_VARIABLE == null + - if: $MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE == null + +vars:test: + extends: .vars + stage: test + script: | + if [[ ${MGCI_TEST_VISIBLE_VARIABLE} != ${MGCI_VARIABLE_TEST_VALUE} ]]; then + echo "⚠️ Var VISIBLE is Corupted" + echo "Var VISIBLE is Corupted:" >> ${CI_PROJECT_DIR}/artifacts/vars_test.txt + echo "MGCI_TEST_VISIBLE_VARIABLE: ${MGCI_TEST_VISIBLE_VARIABLE}" >> ${CI_PROJECT_DIR}/artifacts/vars_test.txt + fi + if [[ ${MGCI_TEST_MASKED_VARIABLE} != ${MGCI_VARIABLE_TEST_VALUE} ]]; then + echo "⚠️ Var MASKED is Corupted" + echo "Var MASKED is Corupted:" >> ${CI_PROJECT_DIR}/artifacts/vars_test.txt + echo "MGCI_TEST_MASKED_VARIABLE: ${MGCI_TEST_MASKED_VARIABLE}" >> ${CI_PROJECT_DIR}/artifacts/vars_test.txt + fi + if [[ ${MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE} != ${MGCI_VARIABLE_TEST_VALUE} ]]; then + echo "⚠️ Var MASKED_AND_HIDDEN is Corupted" + echo "Var MASKED_AND_HIDDEN is Corupted:" >> ${CI_PROJECT_DIR}/artifacts/vars_test.txt + echo "MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE: ${MGCI_TEST_MASKED_AND_HIDDEN_VARIABLE}" >> ${CI_PROJECT_DIR}/artifacts/vars_test.txt + fi + +include: + - local: 'includes-if/tags/cicd_variables.yml' + rules: + - if: $MGCI_TEST_CICD_VARIABLES_JOB_TAGS