stages: - validation - build - prepare - deploy - test - release - publish variables: GIT_SUBMODULE_STRATEGY: recursive MY_PROJECT_ID: "13001358" include: - project: nofusscomputing/projects/gitlab-ci ref: f6d7ebeeb2b9d643c37ccbe6e25fa8d7e9dd970d file: - conventional_commits/.gitlab-ci.yml - mkdocs/.gitlab-ci.yml - validation/.gitlab-ci.yml - gitlab_release/.gitlab-ci.yml Lint Markdown: extends: .Lint_Markdown Main Site: extends: .MKDocs_Build needs: [ 'Lint Markdown' ] Assemble Site: # extends: .MKDocs_Build stage: prepare # image: python:3.7.5-buster # turn mkdocs build template script section to a command template so that customizations can be added. script: - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/source" # - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build" - echo "fetch artifacts from child repo's" - echo "copy static pages source to" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/source" - echo "copy sub-repo source to (merge)" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/source" - echo "mkdocs build source dir" # - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/full-site" - mv "$CI_PROJECT_DIR/artifacts/build/Main Site/build" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/" #- ls -laR $CI_PROJECT_DIR # remove ops placeholder index.html - 'curl --location --output operations-artifacts.zip --header "PRIVATE-TOKEN: ${GIT_COMMIT_TOKEN}" "https://gitlab.com/api/v4/projects/32419575/jobs/artifacts/development/download?job=Static%20Pages"' - unzip operations-artifacts.zip # below 2 lines commented out as need to ffigure out how to download artifacts. - rm -Rf "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/operations/index.html" - echo "cp -rvn" "$CI_PROJECT_DIR/artifacts/build/Static Pages/build/operations" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/" # copy ops pages into main site, not overwriting #- cp -rvn "$CI_PROJECT_DIR/artifacts/build/Static Pages/build/"* "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/" # below line commented out as need to ffigure out how to download artifacts. - cp -rvf "$CI_PROJECT_DIR/artifacts/build/Static Pages/build/operations" "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/build/" - echo "copy prepare files (sitemap, search file) to fullsite (overwrite)" - echo "copy each sub-repo build to fullsite (merge)" # - echo mv "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/full-site" public needs: - 'Main Site' # only available in gitlab premium # use: - "curl -O --header 'PRIVATE-TOKEN: ${GITLAB_API_TOKEN}' https://gitlab.example.com/api/v4/projects/${PROJECT_A_ID}/jobs/${REMOTE_JOB_ID}/artifacts/${REMOTE_FILENAME}" # - project: nofusscomputing/ops # job: Static Pages # ref: development # artifacts: true artifacts: expire_in: 24 hrs when: always paths: - "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/*" rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master"' when: always - when: never pages: stage: deploy variables: GIT_STRATEGY: none script: - mv "$CI_PROJECT_DIR/artifacts/prepare/Assemble Site/build" public needs: [ 'Assemble Site' ] environment: name: staging url: $CI_PAGES_URL artifacts: paths: - public rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master"' when: always - when: never .Pytest_template: stage: test image: ubuntu:18.04 before_script: - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME" - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests" - apt update - apt install -y python3 python3-pip ca-certificates - apt install --no-install-recommends -y chromium-chromedriver - pip3 install --upgrade pip - pip3 install -r test/requirements.txt artifacts: expire_in: 24 hrs when: always paths: - "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/*" reports: junit: - "*.junit.xml" rules: - if: '$CI_COMMIT_BRANCH' when: always - when: never Unit Tests: extends: .Pytest_template needs: [ 'Main Site' ] script: - mv "$CI_PROJECT_DIR/artifacts/build/Main Site/build" build - pytest --verbose --junitxml=unit_test.junit.xml --tb=line test/unit - cp *.junit.xml "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/" - echo "[DEBUG] python_exit[$python_exit]" #Integration Tests: # extends: .Pytest_template # needs: # - pages # - 'Unit Tests' # script: # - echo "placeholder job for integration tests" > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/DETEMEME.txt" .Add_SSHKey: &Add_SSHKey_Before_Script | mkdir -p ~/.ssh chmod 700 ~/.ssh eval $(ssh-agent -s) SSH_KEY_NAME=SSH_PRIVATE_KEY_${ANSIBLE_USER} echo "Debug SSH_KEY_NAME[$SSH_KEY_NAME]" chmod 700 "${!SSH_KEY_NAME}" ssh-add "${!SSH_KEY_NAME}" #update next line so that ca key can be obtained. original source is ansible repo #HOST_SSH_ID=$(cat roles/openssh-server/files/nww-nl/host_ca.pub) HOST_SSH_ID=$(cat ${SSH_HOST_CA}) echo DEBUG HOST_SSH_ID[$HOST_SSH_ID] echo "@cert-authority *.networkedweb.com $HOST_SSH_ID" > ~/.ssh/known_hosts chmod 700 ~/.ssh/known_hosts ls -la ~/.ssh public_website: stage: publish image: debian:buster-slim variables: GIT_STRATEGY: none before_script: - if [ "0$ANSIBLE_USER" == "0" ]; then ANSIBLE_USER=deploy; fi - echo Debug ANSIBLE_USER[$ANSIBLE_USER] - apt update - apt install --no-install-recommends -y ssh - ls -la "$CI_PROJECT_DIR/artifacts/prepare/Assemble Site/build" - mv "$CI_PROJECT_DIR/artifacts/prepare/Assemble Site/build" "$CI_PROJECT_DIR/public" - ls -la "$CI_PROJECT_DIR" - ls -la "$CI_PROJECT_DIR/public" - *Add_SSHKey_Before_Script script: - scp -r "$CI_PROJECT_DIR/public" ${ANSIBLE_USER}@${HOST_PUBLIC_WEBSITE}:${PUBLIC_WEBSITE_PATH} needs: [ 'Assemble Site', 'Unit Tests'] environment: name: production url: https://nofusscomputing.com artifacts: paths: - public rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH == "master"' when: always - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH == "development" && $CI_PIPELINE_SOURCE != "merge_request_event"' when: manual - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "development" && $CI_COMMIT_BRANCH != "master" && $CI_PIPELINE_SOURCE != "merge_request_event"' when: manual allow_failure: true - when: never Gitlab Release: extends: - .gitlab_release