diff --git a/.gitlab/.gitlab-ci.yml b/.gitlab/.gitlab-ci.yml index 64b372d..be738cf 100644 --- a/.gitlab/.gitlab-ci.yml +++ b/.gitlab/.gitlab-ci.yml @@ -1,49 +1,110 @@ -# This file is a template, and might need editing before it works on your project. -# This is a sample GitLab CI/CD configuration file that should run without any modifications. -# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts, -# it uses echo commands to simulate the pipeline execution. -# -# A pipeline is composed of independent jobs that run scripts, grouped into stages. -# Stages run in sequential order, but jobs within stages run in parallel. -# -# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages -# -# You can copy and paste this template into a new `.gitlab-ci.yml` file. -# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword. -# -# To contribute improvements to CI/CD templates, please follow the Development guide at: -# https://docs.gitlab.com/ee/development/cicd/templates.html -# This specific template is located at: -# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml +stages: + - Manifest + - Test + - Bundle + - Distribute + - Release -stages: # List of stages for jobs, and their order of execution - - build - - test - - deploy +variables: + ENTRY_FOLDER: test/ + RELEASE_VERSION: v0.$CI_PIPELINE_IID + PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${PACKAGE_NAME}/${RELEASE_VERSION}" -build-job: # This job runs in the build stage, which runs first. - stage: build +.gen-manifest-job: &gen-manifest + stage: Manifest + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + changes: + - ${ENTRY_FOLDER}/${PACKAGE_NAME}/* script: - - echo "Compiling the code..." - - echo "Compile complete." + - echo testing ${PACKAGE_NAME}.md -unit-test-job: # This job runs in the test stage. - stage: test # It only starts when the job in the build stage completes successfully. - script: - - echo "Running unit tests... This will take about 60 seconds." - - sleep 60 - - echo "Code coverage is 90%" +gen-manifest-job/valid_set: + variables: + PACKAGE_NAME: "valid_set" + <<: *gen-manifest -lint-test-job: # This job also runs in the test stage. - stage: test # It can run at the same time as unit-test-job (in parallel). +.check-content-job: &check-content + stage: Test + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + changes: + - ${ENTRY_FOLDER}/${PACKAGE_NAME}/* script: - - echo "Linting code... This will take about 10 seconds." - - sleep 10 - - echo "No lint issues found." + - echo testing ${PACKAGE_NAME}.md -deploy-job: # This job runs in the deploy stage. - stage: deploy # It only runs when *both* jobs in the test stage complete successfully. - environment: production +check-content-job/valid_set: + variables: + PACKAGE_NAME: "valid_set" + <<: *check-content + +.bundle-job: &bundle + stage: Bundle + image: javieraviles/zip:latest + rules: + - if: $CI_COMMIT_TAG + when: never # Do not run this job when a tag is created manually + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + changes: + - ${ENTRY_FOLDER}/${PACKAGE_NAME}/* script: - - echo "Deploying application..." - - echo "Application successfully deployed." + - zip -j ${PACKAGE_NAME}.zip ${ENTRY_FOLDER}/${PACKAGE_NAME}/* + artifacts: + paths: + - ${PACKAGE_NAME}.zip + when: on_success + expire_in: "1 hour" + +bundle-job/valid_set: + variables: + PACKAGE_NAME: "valid_set" + <<: *bundle + +.upload-job: &upload + stage: Distribute + image: curlimages/curl:latest + rules: + - if: $CI_COMMIT_TAG + when: never # Do not run this job when a tag is created manually + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + changes: + - ${ENTRY_FOLDER}/${PACKAGE_NAME}/* + script: + - | + curl --fail \ + --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \ + --upload-file ${PACKAGE_NAME}.zip "${PACKAGE_REGISTRY_URL}/${PACKAGE_NAME}.zip?select=package_file" + +# upload-job/valid_set: +# needs: +# - bundle-job/valid_set +# variables: +# PACKAGE_NAME: "valid_set" +# <<: *upload + +.release-job: &release + stage: Release + image: registry.gitlab.com/gitlab-org/release-cli:latest + rules: + - if: $CI_COMMIT_TAG + when: never # Do not run this job when a tag is created manually + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + changes: + - ${ENTRY_FOLDER}/${PACKAGE_NAME}/* + script: + - echo "Releasing assets for $PACKAGE_NAME" + release: + name: "Release $PACKAGE_NAME $RELEASE_VERSION" + tag_name: "$PACKAGE_NAME.$RELEASE_VERSION" + description: "Version $RELEASE_VERSION" + ref: "$CI_COMMIT_SHA" + assets: + links: + - name: ${PACKAGE_NAME} + url: "${PACKAGE_REGISTRY_URL}/${PACKAGE_NAME}.zip" +# release-job/valid_set: +# needs: +# - upload-job/valid_set +# variables: +# PACKAGE_NAME: "valid_set" +# <<: *release diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..56ce11b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "conventionalCommits.scopes": [ + "cicd" + ] +} \ No newline at end of file