Loading .gitignore +3 −2 Original line number Diff line number Diff line site/ docs/jobs/**/* !docs/jobs/**/.pages docs/jobs/**/*.md docs/images/jobs **/.DS_Store .idea No newline at end of file .gitlab-ci.yml +159 −21 Original line number Diff line number Diff line stages: - static_tests - project_setup - build - deployment - deploy include: - remote: 'https://jobs.r2devops.io/1.2.0/mkdocs.yml?scope=0.yml' - remote: 'https://jobs.r2devops.io/0.2.0/pages.yml?scope=0.yml' mkdocs: variables: PIPENV_PIPFILE: tools/builder/Pipfile before_script: - pip install pipenv && pipenv install - pipenv run python tools/builder/builder.py - pip3 install mkdocs-awesome-pages-plugin==2.4.0 # temporary, it will be removed after #202 pages: rules: - if: '$CI_COMMIT_BRANCH == "latest"' - remote: 'https://jobs.r2devops.io/links_checker.yml?scope=0.yml' - remote: 'https://jobs.r2devops.io/1.4.0/mkdocs.yml?scope=0.yml' - remote: 'https://jobs.r2devops.io/0.3.0/pages.yml?scope=0.yml' ci_linter: image: golang:1.15.2-alpine3.12 stage: static_tests image: name: alpine/httpie:2.4.0 entrypoint: [""] variables: GITLAB_CI_LINT_URL: "https://gitlab.com/api/v4/ci/lint?include_merged_yaml=true" JOB_FILES_EXTENSION: ".yml" script: - apk add --no-cache git - go get gitlab.com/orobardet/gitlab-ci-linter - apk add --no-cache jq - mkdir ci_linter_reports - for JOB_PATH in jobs/*; do - echo "Start checking ${JOB_PATH}/${JOB} using Gitlab CI linter API" - JOB=$(basename ${JOB_PATH}) - gitlab-ci-linter ${JOB_PATH}/${JOB}.yml - jq --null-input --arg yaml "$(cat ${JOB_PATH}/${JOB}${JOB_FILES_EXTENSION})" '.content=$yaml' | http --print 'b' --check-status "$GITLAB_CI_LINT_URL" Content-Type:"application/json" PRIVATE-TOKEN:${API_TOKEN} > ci_linter_reports/${JOB}.json - if [ $(jq -r '.status' ci_linter_reports/${JOB}.json) == "valid" ]; then - echo "👍 job ${JOB_PATH}/${JOB} is valid" - else - echo "👎 job ${JOB_PATH}/${JOB} is invalid" - jq '.' ci_linter_reports/${JOB}.json - exit 1 - fi - done artifacts: expose_as: "job_ci_lint" paths: - ci_linter_reports/ when: always structure: job_structure: image: python:3.9.1-alpine stage: static_tests variables: Loading @@ -42,18 +50,144 @@ structure: script: - pipenv run python3 tools/job_structure/job_structure.py artifacts: expose_as: "job_structure" paths: - ${JOB_LOGFILE} when: always job_customs: image: python:3.9.1-alpine stage: static_tests variables: PIPENV_PIPFILE: tools/job_customs/Pipfile JOB_LOGFILE: "job_customs.log" before_script: - pip install --ignore-installed distlib pipenv - pipenv install script: - pipenv run python3 tools/job_customs/job_customs.py artifacts: expose_as: "jobs_customs" paths: - ${JOB_LOGFILE} job_image_scan: image: docker:19.03 stage: static_tests services: - name: docker:19.03-dind entrypoint: ["env", "-u", "DOCKER_HOST"] command: ["dockerd-entrypoint.sh"] variables: PIPENV_PIPFILE: tools/job_image/Pipfile JOB_LOGFILE: "job_image.log" OUTPUT_DIR: "scan_output" TRIVY_EXIT_ON_SEVERITY: "" TRIVY_SEVERITY: "LOW,MEDIUM,HIGH,CRITICAL" TRIVY_EXIT_CODE: 0 TRIVY_VULN_TYPE: "os,library" TRIVY_NO_PROGRESS: "false" TRIVY_OUTPUT: "junit-report.xml" TRIVY_IGNOREFILE: .trivyignore TRIVY_CACHE_DIR: .trivycache/ TRIVY_FORMAT: "template" TEMPLATE_NAME: "junit.tpl" TRIVY_CLEAR_CACHE: "false" TRIVY_IGNORE_UNFIXED: "false" TRIVY_DEBUG: "false" DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" TRIVY_VERSION: "0.9.2" TRIVY_REMOTE: "" TRIVY_TIMEOUT: "" TRIVY_LIGHT: "false" TRIVY_DOWNLOAD_DB_ONLY: "false" TRIVY_TOKEN: "" TRIVY_QUIET: "false" TRIVY_SKIP_UPDATE: "false" before_script: - apk add --no-cache python3 py3-pip - pip install --ignore-installed distlib pipenv - pipenv install - wget https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz - tar zxvf trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz - wget -O $TEMPLATE_NAME https://github.com/aquasecurity/trivy/raw/v${TRIVY_VERSION}/contrib/junit.tpl - mkdir ${OUTPUT_DIR} script: - for JOB in $(ls -A jobs); do - IMAGE=$(pipenv run python3 tools/job_image/job_image.py ${JOB}) - if [ ! -z ${IMAGE} ]; then - NAME=$(basename ${IMAGE}) - ./trivy --template "@${TEMPLATE_NAME}" -o ${OUTPUT_DIR}/${NAME}.${TRIVY_OUTPUT} ${IMAGE} - if [ ! -z ${TRIVY_EXIT_ON_SEVERITY} ]; then - ./trivy --template "@${TEMPLATE_NAME}" --exit-code 1 --severity ${TRIVY_EXIT_ON_SEVERITY} -o ${OUTPUT_DIR}/${NAME}-failed-${TRIVY_OUTPUT} ${IMAGE} - fi - fi - IMAGE="" - done cache: paths: - "$TRIVY_CACHE_DIR" artifacts: expose_as: "job_image_scan" paths: - "${JOB_LOGFILE}" - "${OUTPUT_DIR}" reports: junit: - "${OUTPUT_DIR}/*.xml" expire_in: 30 days when: always links_checker: variables: LICHE_EXCLUDE: "^[^http]" FAIL_ON_BROKEN: "true" allow_failure: true # See https://docs.gitlab.com/ee/api/labels.html job_labels: image: python:3.9.1-alpine stage: project_setup variables: PIPENV_PIPFILE: tools/job_labels/Pipfile JOB_LOGFILE: "job_labels.log" before_script: - pip install --ignore-installed distlib pipenv - pipenv install script: - pipenv run python3 tools/job_labels/job_labels.py artifacts: expose_as: "job_labels" paths: - ${JOB_LOGFILE} expire_in: 30 days when: always rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PROJECT_PATH_SLUG == "r2devops-hub"' mkdocs: variables: PIPENV_PIPFILE: tools/builder/Pipfile before_script: - pip install pipenv && pipenv install - pipenv run python tools/builder/builder.py # See https://docs.gitlab.com/ee/api/releases/ # We can only control the link to the hub, the release is still storing the source code release: stage: deploy image: name: alpine/httpie:2.2.0 entrypoint: [""] stage: deployment variables: PIPENV_PIPFILE: tools/notify/Pipfile before_script: Loading Loading @@ -92,3 +226,7 @@ release: done rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' pages: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' Pipfile +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ mkdocs-git-revision-date-localized-plugin = "==0.7.2" mkdocs-material = "==6.1.5" mkdocs-material-extensions = "==1.0.1" mkdocs-minify-plugin = "==0.3.0" requests = "==2.25.0" [requires] python_version = "3" Pipfile.lock +120 −38 Original line number Diff line number Diff line { "_meta": { "hash": { "sha256": "0d87b85e161b299977203ec926d3886315e0919718d7172acf16588a4693c853" "sha256": "8a764767ba37be02da1a83424c5a85a7a7b86a9d1f011a56908c1077cf72ef88" }, "pipfile-spec": 6, "requires": { Loading @@ -21,19 +21,37 @@ "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5", "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.9.0" }, "certifi": { "hashes": [ "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" ], "version": "==2020.12.5" }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==3.0.4" }, "click": { "hashes": [ "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==7.1.2" }, "future": { "hashes": [ "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" ], "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.18.2" }, "gitdb": { Loading @@ -41,14 +59,16 @@ "sha256:91f36bfb1ab7949b3b40e23736db18231bf7593edada2ba5c3a174a7b23657ac", "sha256:c9e1f2d0db7ddb9a704c2a0217be31214e91a4fe1dea1efad19ae42ba0c285c9" ], "markers": "python_version >= '3.4'", "version": "==4.0.5" }, "gitpython": { "hashes": [ "sha256:6eea89b655917b500437e9668e4a12eabdcf00229a0df1762aabd692ef9b746b", "sha256:befa4d101f91bad1b632df4308ec64555db684c360bd7d2130b4807d49ce86b8" "sha256:42dbefd8d9e2576c496ed0059f3103dcef7125b9ce16f9d5f9c834aed44a1dac", "sha256:867ec3dfb126aac0f8296b19fb63b8c4a399f32b4b6fafe84c4b10af5fa9f7b5" ], "version": "==3.1.11" "markers": "python_version >= '3.4'", "version": "==3.1.12" }, "htmlmin": { "hashes": [ Loading @@ -56,19 +76,29 @@ ], "version": "==0.1.12" }, "idna": { "hashes": [ "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.10" }, "jinja2": { "hashes": [ "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0", "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035" "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" ], "version": "==2.11.2" "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.11.3" }, "joblib": { "hashes": [ "sha256:698c311779f347cf6b7e6b8a39bb682277b8ee4aba8cf9507bc0cf4cd4737b72", "sha256:9e284edd6be6b71883a63c9b7f124738a3c16195513ad940eae7e3438de885d5" "sha256:75ead23f13484a2a414874779d69ade40d4fa1abe62b222a23cd50d4bc822f6f", "sha256:7ad866067ac1fdec27d51c8678ea760601b70e32ff1881d4dc8e1171f2b64b24" ], "version": "==0.17.0" "markers": "python_version >= '3.6'", "version": "==1.0.0" }, "jsmin": { "hashes": [ Loading Loading @@ -97,6 +127,7 @@ "sha256:5d9f2b5ca24bc4c7a390d22323ca4bad200368612b5aaa7796babf971d2b2f18", "sha256:c109c15b7dc20a9ac454c9e6025927d44460b85bd039da028d85e2b6d0bcc328" ], "markers": "python_version >= '3.6'", "version": "==3.3.3" }, "markupsafe": { Loading @@ -106,8 +137,12 @@ "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f", "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39", "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014", "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f", "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", Loading @@ -116,25 +151,41 @@ "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85", "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1", "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850", "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0", "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb", "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1", "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2", "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7", "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8", "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193", "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b", "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5", "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c", "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032", "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be", "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.1" }, "mkdocs": { Loading @@ -142,6 +193,7 @@ "sha256:096f52ff52c02c7e90332d2e53da862fde5c062086e1b5356a6e392d5d60f5e9", "sha256:f0b61e5402b99d7789efa032c7a74c90a20220a9c81749da06dbfbcbd52ffb39" ], "markers": "python_version >= '3.5'", "version": "==1.1.2" }, "mkdocs-awesome-pages-plugin": { Loading Loading @@ -192,10 +244,11 @@ }, "pygments": { "hashes": [ "sha256:ccf3acacf3782cbed4a989426012f1c535c9a90d3a7fc3f16d231b9372d2b716", "sha256:f275b6c0909e5dafd2d6269a656aa90fa58ebf4a74f8fcf9053195d226b24a08" "sha256:bc9591213a8f0e0ca1a5e68a479b4887fdc3e75d0774e5c71c31920c427de435", "sha256:df49d09b498e83c1a73128295860250b0b7edd4c723a32e9bc0d295c7c2ec337" ], "version": "==2.7.3" "markers": "python_version >= '3.5'", "version": "==2.7.4" }, "pymdown-extensions": { "hashes": [ Loading @@ -207,28 +260,37 @@ }, "pytz": { "hashes": [ "sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268", "sha256:5c55e189b682d420be27c6995ba6edce0c0a77dd67bfbe2ae6607134d5851ffd" "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da", "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798" ], "version": "==2020.4" "version": "==2021.1" }, "pyyaml": { "hashes": [ "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e", "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a", "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" ], "version": "==5.3.1" "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==5.4.1" }, "regex": { "hashes": [ Loading Loading @@ -276,19 +338,29 @@ ], "version": "==2020.11.13" }, "requests": { "hashes": [ "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8", "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998" ], "index": "pypi", "version": "==2.25.0" }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.15.0" }, "smmap": { "hashes": [ "sha256:54c44c197c819d5ef1991799a7e30b662d1e520f2ac75c9efbeb54a742214cf4", "sha256:9c98bbd1f9786d22f14b3d4126894d56befb835ec90cef151af566c7e19b5d24" "sha256:7bfcf367828031dc893530a29cb35eb8c8f2d7c8f2d0989354d75d24c8573714", "sha256:84c2751ef3072d4f6b2785ec7ee40244c6f45eb934d9e543e2c51f1bd3d54c50" ], "version": "==3.0.4" "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==3.0.5" }, "tornado": { "hashes": [ Loading Loading @@ -334,14 +406,24 @@ "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68", "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5" ], "markers": "python_version >= '3.5'", "version": "==6.1" }, "tqdm": { "hashes": [ "sha256:38b658a3e4ecf9b4f6f8ff75ca16221ae3378b2e175d846b6b33ea3a20852cf5", "sha256:d4f413aecb61c9779888c64ddf0c62910ad56dcbe857d8922bb505d4dbff0df1" "sha256:4621f6823bab46a9cc33d48105753ccbea671b68bab2c50a9f0be23d4065cb5a", "sha256:fe3d08dd00a526850568d542ff9de9bbc2a09a791da3c334f3213d8d0bbbca65" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==4.56.0" }, "urllib3": { "hashes": [ "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" ], "version": "==4.54.1" "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.26.3" } }, "develop": {} Loading README.md +10 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,16 @@ mkdocs serve ## How to update tools ### Guidelines For `pyhton` tools: * Pylint note >= 9 * Usage of logging * Usage of argparse when args are required * [`Format`](https://docs.python.org/3/library/functions.html?highlight=format#format) must be used instead of `%s` or string concatenation with `+` * Docstring format compliant with [Google styleguide](https://google.github.io/styleguide/pyguide.html#244-decision) ### Requirements Each tools have their own `Pipfile` in their folder to manage their Loading Loading
.gitignore +3 −2 Original line number Diff line number Diff line site/ docs/jobs/**/* !docs/jobs/**/.pages docs/jobs/**/*.md docs/images/jobs **/.DS_Store .idea No newline at end of file
.gitlab-ci.yml +159 −21 Original line number Diff line number Diff line stages: - static_tests - project_setup - build - deployment - deploy include: - remote: 'https://jobs.r2devops.io/1.2.0/mkdocs.yml?scope=0.yml' - remote: 'https://jobs.r2devops.io/0.2.0/pages.yml?scope=0.yml' mkdocs: variables: PIPENV_PIPFILE: tools/builder/Pipfile before_script: - pip install pipenv && pipenv install - pipenv run python tools/builder/builder.py - pip3 install mkdocs-awesome-pages-plugin==2.4.0 # temporary, it will be removed after #202 pages: rules: - if: '$CI_COMMIT_BRANCH == "latest"' - remote: 'https://jobs.r2devops.io/links_checker.yml?scope=0.yml' - remote: 'https://jobs.r2devops.io/1.4.0/mkdocs.yml?scope=0.yml' - remote: 'https://jobs.r2devops.io/0.3.0/pages.yml?scope=0.yml' ci_linter: image: golang:1.15.2-alpine3.12 stage: static_tests image: name: alpine/httpie:2.4.0 entrypoint: [""] variables: GITLAB_CI_LINT_URL: "https://gitlab.com/api/v4/ci/lint?include_merged_yaml=true" JOB_FILES_EXTENSION: ".yml" script: - apk add --no-cache git - go get gitlab.com/orobardet/gitlab-ci-linter - apk add --no-cache jq - mkdir ci_linter_reports - for JOB_PATH in jobs/*; do - echo "Start checking ${JOB_PATH}/${JOB} using Gitlab CI linter API" - JOB=$(basename ${JOB_PATH}) - gitlab-ci-linter ${JOB_PATH}/${JOB}.yml - jq --null-input --arg yaml "$(cat ${JOB_PATH}/${JOB}${JOB_FILES_EXTENSION})" '.content=$yaml' | http --print 'b' --check-status "$GITLAB_CI_LINT_URL" Content-Type:"application/json" PRIVATE-TOKEN:${API_TOKEN} > ci_linter_reports/${JOB}.json - if [ $(jq -r '.status' ci_linter_reports/${JOB}.json) == "valid" ]; then - echo "👍 job ${JOB_PATH}/${JOB} is valid" - else - echo "👎 job ${JOB_PATH}/${JOB} is invalid" - jq '.' ci_linter_reports/${JOB}.json - exit 1 - fi - done artifacts: expose_as: "job_ci_lint" paths: - ci_linter_reports/ when: always structure: job_structure: image: python:3.9.1-alpine stage: static_tests variables: Loading @@ -42,18 +50,144 @@ structure: script: - pipenv run python3 tools/job_structure/job_structure.py artifacts: expose_as: "job_structure" paths: - ${JOB_LOGFILE} when: always job_customs: image: python:3.9.1-alpine stage: static_tests variables: PIPENV_PIPFILE: tools/job_customs/Pipfile JOB_LOGFILE: "job_customs.log" before_script: - pip install --ignore-installed distlib pipenv - pipenv install script: - pipenv run python3 tools/job_customs/job_customs.py artifacts: expose_as: "jobs_customs" paths: - ${JOB_LOGFILE} job_image_scan: image: docker:19.03 stage: static_tests services: - name: docker:19.03-dind entrypoint: ["env", "-u", "DOCKER_HOST"] command: ["dockerd-entrypoint.sh"] variables: PIPENV_PIPFILE: tools/job_image/Pipfile JOB_LOGFILE: "job_image.log" OUTPUT_DIR: "scan_output" TRIVY_EXIT_ON_SEVERITY: "" TRIVY_SEVERITY: "LOW,MEDIUM,HIGH,CRITICAL" TRIVY_EXIT_CODE: 0 TRIVY_VULN_TYPE: "os,library" TRIVY_NO_PROGRESS: "false" TRIVY_OUTPUT: "junit-report.xml" TRIVY_IGNOREFILE: .trivyignore TRIVY_CACHE_DIR: .trivycache/ TRIVY_FORMAT: "template" TEMPLATE_NAME: "junit.tpl" TRIVY_CLEAR_CACHE: "false" TRIVY_IGNORE_UNFIXED: "false" TRIVY_DEBUG: "false" DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" TRIVY_VERSION: "0.9.2" TRIVY_REMOTE: "" TRIVY_TIMEOUT: "" TRIVY_LIGHT: "false" TRIVY_DOWNLOAD_DB_ONLY: "false" TRIVY_TOKEN: "" TRIVY_QUIET: "false" TRIVY_SKIP_UPDATE: "false" before_script: - apk add --no-cache python3 py3-pip - pip install --ignore-installed distlib pipenv - pipenv install - wget https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz - tar zxvf trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz - wget -O $TEMPLATE_NAME https://github.com/aquasecurity/trivy/raw/v${TRIVY_VERSION}/contrib/junit.tpl - mkdir ${OUTPUT_DIR} script: - for JOB in $(ls -A jobs); do - IMAGE=$(pipenv run python3 tools/job_image/job_image.py ${JOB}) - if [ ! -z ${IMAGE} ]; then - NAME=$(basename ${IMAGE}) - ./trivy --template "@${TEMPLATE_NAME}" -o ${OUTPUT_DIR}/${NAME}.${TRIVY_OUTPUT} ${IMAGE} - if [ ! -z ${TRIVY_EXIT_ON_SEVERITY} ]; then - ./trivy --template "@${TEMPLATE_NAME}" --exit-code 1 --severity ${TRIVY_EXIT_ON_SEVERITY} -o ${OUTPUT_DIR}/${NAME}-failed-${TRIVY_OUTPUT} ${IMAGE} - fi - fi - IMAGE="" - done cache: paths: - "$TRIVY_CACHE_DIR" artifacts: expose_as: "job_image_scan" paths: - "${JOB_LOGFILE}" - "${OUTPUT_DIR}" reports: junit: - "${OUTPUT_DIR}/*.xml" expire_in: 30 days when: always links_checker: variables: LICHE_EXCLUDE: "^[^http]" FAIL_ON_BROKEN: "true" allow_failure: true # See https://docs.gitlab.com/ee/api/labels.html job_labels: image: python:3.9.1-alpine stage: project_setup variables: PIPENV_PIPFILE: tools/job_labels/Pipfile JOB_LOGFILE: "job_labels.log" before_script: - pip install --ignore-installed distlib pipenv - pipenv install script: - pipenv run python3 tools/job_labels/job_labels.py artifacts: expose_as: "job_labels" paths: - ${JOB_LOGFILE} expire_in: 30 days when: always rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PROJECT_PATH_SLUG == "r2devops-hub"' mkdocs: variables: PIPENV_PIPFILE: tools/builder/Pipfile before_script: - pip install pipenv && pipenv install - pipenv run python tools/builder/builder.py # See https://docs.gitlab.com/ee/api/releases/ # We can only control the link to the hub, the release is still storing the source code release: stage: deploy image: name: alpine/httpie:2.2.0 entrypoint: [""] stage: deployment variables: PIPENV_PIPFILE: tools/notify/Pipfile before_script: Loading Loading @@ -92,3 +226,7 @@ release: done rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' pages: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
Pipfile +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ mkdocs-git-revision-date-localized-plugin = "==0.7.2" mkdocs-material = "==6.1.5" mkdocs-material-extensions = "==1.0.1" mkdocs-minify-plugin = "==0.3.0" requests = "==2.25.0" [requires] python_version = "3"
Pipfile.lock +120 −38 Original line number Diff line number Diff line { "_meta": { "hash": { "sha256": "0d87b85e161b299977203ec926d3886315e0919718d7172acf16588a4693c853" "sha256": "8a764767ba37be02da1a83424c5a85a7a7b86a9d1f011a56908c1077cf72ef88" }, "pipfile-spec": 6, "requires": { Loading @@ -21,19 +21,37 @@ "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5", "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.9.0" }, "certifi": { "hashes": [ "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" ], "version": "==2020.12.5" }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==3.0.4" }, "click": { "hashes": [ "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==7.1.2" }, "future": { "hashes": [ "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" ], "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.18.2" }, "gitdb": { Loading @@ -41,14 +59,16 @@ "sha256:91f36bfb1ab7949b3b40e23736db18231bf7593edada2ba5c3a174a7b23657ac", "sha256:c9e1f2d0db7ddb9a704c2a0217be31214e91a4fe1dea1efad19ae42ba0c285c9" ], "markers": "python_version >= '3.4'", "version": "==4.0.5" }, "gitpython": { "hashes": [ "sha256:6eea89b655917b500437e9668e4a12eabdcf00229a0df1762aabd692ef9b746b", "sha256:befa4d101f91bad1b632df4308ec64555db684c360bd7d2130b4807d49ce86b8" "sha256:42dbefd8d9e2576c496ed0059f3103dcef7125b9ce16f9d5f9c834aed44a1dac", "sha256:867ec3dfb126aac0f8296b19fb63b8c4a399f32b4b6fafe84c4b10af5fa9f7b5" ], "version": "==3.1.11" "markers": "python_version >= '3.4'", "version": "==3.1.12" }, "htmlmin": { "hashes": [ Loading @@ -56,19 +76,29 @@ ], "version": "==0.1.12" }, "idna": { "hashes": [ "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.10" }, "jinja2": { "hashes": [ "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0", "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035" "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" ], "version": "==2.11.2" "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.11.3" }, "joblib": { "hashes": [ "sha256:698c311779f347cf6b7e6b8a39bb682277b8ee4aba8cf9507bc0cf4cd4737b72", "sha256:9e284edd6be6b71883a63c9b7f124738a3c16195513ad940eae7e3438de885d5" "sha256:75ead23f13484a2a414874779d69ade40d4fa1abe62b222a23cd50d4bc822f6f", "sha256:7ad866067ac1fdec27d51c8678ea760601b70e32ff1881d4dc8e1171f2b64b24" ], "version": "==0.17.0" "markers": "python_version >= '3.6'", "version": "==1.0.0" }, "jsmin": { "hashes": [ Loading Loading @@ -97,6 +127,7 @@ "sha256:5d9f2b5ca24bc4c7a390d22323ca4bad200368612b5aaa7796babf971d2b2f18", "sha256:c109c15b7dc20a9ac454c9e6025927d44460b85bd039da028d85e2b6d0bcc328" ], "markers": "python_version >= '3.6'", "version": "==3.3.3" }, "markupsafe": { Loading @@ -106,8 +137,12 @@ "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f", "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39", "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014", "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f", "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", Loading @@ -116,25 +151,41 @@ "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85", "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1", "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850", "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0", "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb", "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1", "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2", "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7", "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8", "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193", "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b", "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5", "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c", "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032", "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be", "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.1" }, "mkdocs": { Loading @@ -142,6 +193,7 @@ "sha256:096f52ff52c02c7e90332d2e53da862fde5c062086e1b5356a6e392d5d60f5e9", "sha256:f0b61e5402b99d7789efa032c7a74c90a20220a9c81749da06dbfbcbd52ffb39" ], "markers": "python_version >= '3.5'", "version": "==1.1.2" }, "mkdocs-awesome-pages-plugin": { Loading Loading @@ -192,10 +244,11 @@ }, "pygments": { "hashes": [ "sha256:ccf3acacf3782cbed4a989426012f1c535c9a90d3a7fc3f16d231b9372d2b716", "sha256:f275b6c0909e5dafd2d6269a656aa90fa58ebf4a74f8fcf9053195d226b24a08" "sha256:bc9591213a8f0e0ca1a5e68a479b4887fdc3e75d0774e5c71c31920c427de435", "sha256:df49d09b498e83c1a73128295860250b0b7edd4c723a32e9bc0d295c7c2ec337" ], "version": "==2.7.3" "markers": "python_version >= '3.5'", "version": "==2.7.4" }, "pymdown-extensions": { "hashes": [ Loading @@ -207,28 +260,37 @@ }, "pytz": { "hashes": [ "sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268", "sha256:5c55e189b682d420be27c6995ba6edce0c0a77dd67bfbe2ae6607134d5851ffd" "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da", "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798" ], "version": "==2020.4" "version": "==2021.1" }, "pyyaml": { "hashes": [ "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e", "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a", "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" ], "version": "==5.3.1" "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==5.4.1" }, "regex": { "hashes": [ Loading Loading @@ -276,19 +338,29 @@ ], "version": "==2020.11.13" }, "requests": { "hashes": [ "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8", "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998" ], "index": "pypi", "version": "==2.25.0" }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.15.0" }, "smmap": { "hashes": [ "sha256:54c44c197c819d5ef1991799a7e30b662d1e520f2ac75c9efbeb54a742214cf4", "sha256:9c98bbd1f9786d22f14b3d4126894d56befb835ec90cef151af566c7e19b5d24" "sha256:7bfcf367828031dc893530a29cb35eb8c8f2d7c8f2d0989354d75d24c8573714", "sha256:84c2751ef3072d4f6b2785ec7ee40244c6f45eb934d9e543e2c51f1bd3d54c50" ], "version": "==3.0.4" "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==3.0.5" }, "tornado": { "hashes": [ Loading Loading @@ -334,14 +406,24 @@ "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68", "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5" ], "markers": "python_version >= '3.5'", "version": "==6.1" }, "tqdm": { "hashes": [ "sha256:38b658a3e4ecf9b4f6f8ff75ca16221ae3378b2e175d846b6b33ea3a20852cf5", "sha256:d4f413aecb61c9779888c64ddf0c62910ad56dcbe857d8922bb505d4dbff0df1" "sha256:4621f6823bab46a9cc33d48105753ccbea671b68bab2c50a9f0be23d4065cb5a", "sha256:fe3d08dd00a526850568d542ff9de9bbc2a09a791da3c334f3213d8d0bbbca65" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==4.56.0" }, "urllib3": { "hashes": [ "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" ], "version": "==4.54.1" "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.26.3" } }, "develop": {} Loading
README.md +10 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,16 @@ mkdocs serve ## How to update tools ### Guidelines For `pyhton` tools: * Pylint note >= 9 * Usage of logging * Usage of argparse when args are required * [`Format`](https://docs.python.org/3/library/functions.html?highlight=format#format) must be used instead of `%s` or string concatenation with `+` * Docstring format compliant with [Google styleguide](https://google.github.io/styleguide/pyguide.html#244-decision) ### Requirements Each tools have their own `Pipfile` in their folder to manage their Loading