def test_is_old_schema(tmp_path): url_zst = "https://community-tc.services.mozilla.com/api/index/v1/task/project.relman.bugbug.data_commits.latest/artifacts/public/prova.json.zst" url_version = "https://community-tc.services.mozilla.com/api/index/v1/task/project.relman.bugbug.data_commits.latest/artifacts/public/prova.json.version" db_path = tmp_path / "prova.json" db.register(db_path, url_zst, 1, support_files=[]) assert os.path.exists(db_path.with_suffix(db_path.suffix + ".version")) responses.add(responses.GET, url_version, status=404) responses.add(responses.GET, url_version, status=424) responses.add(responses.GET, url_version, status=200, body="1") responses.add(responses.GET, url_version, status=200, body="42") # When the remote version file doesn't exist, we consider the db as being old. assert db.is_old_schema(db_path) # When the remote version file doesn't exist, we consider the db as being old. assert db.is_old_schema(db_path) # When the remote version file exists and returns the same version as the current db, we consider the remote db as not being old. assert not db.is_old_schema(db_path) # When the remote version file exists and returns a newer version than the current db, we consider the remote db as not being old. assert not db.is_old_schema(db_path) db.register(db_path, url_zst, 43, support_files=[]) # When the remote version file exists and returns an older version than the current db, we consider the remote db as being old. assert db.is_old_schema(db_path)
def generate(self): db_path = os.path.join("data", self.git_repo_path) db.register( db_path, "https://s3-us-west-2.amazonaws.com/communitytc-bugbug/data/", VERSION, ) is_old_version = db.is_old_schema(db_path) with ThreadPoolExecutorResult(max_workers=2) as executor: cloner = executor.submit(repository.clone, self.repo_dir) cloner.add_done_callback( lambda future: logger.info("mozilla-central cloned") ) git_user = get_secret("GIT_USER") git_password = get_secret("GIT_PASSWORD") repo_push_url = self.repo_url.replace( "https://", f"https://{git_user}:{git_password}@" ) if not is_old_version: executor.submit(self.clone_git_repo) else: executor.submit(self.init_git_repo) tenacity.retry( lambda: subprocess.run( ["git", "config", "--global", "http.postBuffer", "12M"], check=True ), wait=tenacity.wait_fixed(30), stop=tenacity.stop_after_attempt(5), )() push_args = ["git", "push", repo_push_url, "master"] if is_old_version: push_args.append("--force") done = False while not done: done = generator.generate( self.repo_dir, self.git_repo_path, limit=COMMITS_STEP, tokenize=self.tokenize, remove_comments=self.remove_comments, ) tenacity.retry( lambda: subprocess.run(push_args, cwd=self.git_repo_path, check=True), wait=tenacity.wait_fixed(30), stop=tenacity.stop_after_attempt(5), )() # We are not using db.upload as we don't need to upload the git repo. upload_s3([f"{db_path}.version"])
def generate(self): db_path = os.path.join("data", self.git_repo_path) db.register( db_path, f"https://community-tc.services.mozilla.com/api/index/v1/task/project.relman.bugbug.microannotate_{self.git_repo_path}.latest/artifacts/public/", VERSION, ) is_old_version = db.is_old_schema(db_path) with ThreadPoolExecutorResult(max_workers=2) as executor: cloner = executor.submit(repository.clone, self.repo_dir) cloner.add_done_callback( lambda future: logger.info("mozilla-central cloned")) git_user = get_secret("GIT_USER") git_password = get_secret("GIT_PASSWORD") repo_push_url = self.repo_url.replace( "https://", f"https://{git_user}:{git_password}@") if not is_old_version: executor.submit(self.clone_git_repo) else: executor.submit(self.init_git_repo) retry(lambda: subprocess.run( ["git", "config", "--global", "http.postBuffer", "12M"], check=True)) push_args = ["git", "push", repo_push_url, "master"] if is_old_version: push_args.append("--force") done = False while not done: done = generator.generate( self.repo_dir, self.git_repo_path, limit=COMMITS_STEP, tokenize=self.tokenize, remove_comments=self.remove_comments, ) retry(lambda: subprocess.run( push_args, cwd=self.git_repo_path, check=True))