const DOMAIN = config.domain; const NAME = instance; const DEST = dest; fn have_gitea() { have_namespace(`${global::DOMAIN}-ci`) && have_install(`${global::DOMAIN}-ci`, "gitea") && have_service(`${global::DOMAIN}-ci`, "gitea-http") && have_secret(`${global::DOMAIN}-ci`, "gitea-admin-user") } fn have_sonar() { have_namespace(`${global::DOMAIN}-ci`) && have_install(`${global::DOMAIN}-ci`, "sonar") && have_service(`${global::DOMAIN}-ci`, "sonar-sonar") && have_secret(`${global::DOMAIN}-ci`, "sonar-sonar") } fn have_taiga() { have_namespace(`${global::DOMAIN}-ci`) && have_install(`${global::DOMAIN}-ci`, "taiga") && have_service(`${global::DOMAIN}-ci`, "taiga-taiga") && have_secret(`${global::DOMAIN}-ci`, "taiga-taiga") } fn gitea_repos() { let repos = []; let org = global::NAME; org.replace("org-",""); if (have_gitea() && have_sonar()) { let gitea = get_secret(`${global::DOMAIN}-ci`, "gitea-admin-user"); let username = base64_decode(gitea.data.username); let password = base64_decode(gitea.data.password); let headers = http_header_basic(username,password); let response = http_get_json(`http://gitea-http.${global::DOMAIN}-ci.svc:3000/api/v1/orgs/${org}/repos`, headers); if (response.code.to_int()>=200&&response.code.to_int()<300) { repos += response.json.map(|p| p.name); repos.sort(); log_info(`Found ${repos.len} repos`); } } repos } fn post_template() { save_to_tf(`${global::DEST}/conditions.tf`, "conditions", #{ have_gitea: have_gitea(), have_sonar: have_sonar(), have_taiga: have_taiga(), repos: gitea_repos() }); } fn post_install() { let org = global::NAME; org.replace("org-",""); if (have_gitea() && have_sonar()) { let sonar = get_secret(`${global::DOMAIN}-ci`, "sonar-sonar"); let gitea = get_secret(`${global::DOMAIN}-ci`, "gitea-admin-user"); let username = base64_decode(gitea.data.username); let password = base64_decode(gitea.data.password); let headerGit = http_header_basic(username,password); let headerSonar = http_header_basic("admin",base64_decode(sonar.data.ADMIN_PASSWORD)); let response = http_get_json(`http://gitea-http.${global::DOMAIN}-ci.svc:3000/api/v1/orgs/${org}/repos`, headerGit); for p in response.json { let exist = http_get_json(`http://sonar-sonar.${global::DOMAIN}-ci.svc/api/projects/search?projects=${org}__${p.name}`, headerSonar).json.components.len; if (exist < 1) { log_info(`Creating [${org}] ${p.name}`); http_post_json(`http://sonar-sonar.${global::DOMAIN}-ci.svc/api/projects/create?name=%5B${org}%5D%20${p.name}&project=${org}__${p.name}&visibility=private&mainBranch=${p.default_branch}`, headerSonar, #{}); } } } }