
ch.sbb.releasetrain.state.GitStateStore Maven / Gradle / Ivy
The newest version!
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements;
* and to You under the Apache License, Version 2.0.
*/
package ch.sbb.releasetrain.state;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import ch.sbb.releasetrain.state.git.GitClient;
import ch.sbb.releasetrain.state.git.GitRepo;
import ch.sbb.releasetrain.state.model.ReleaseState;
/**
* Store the release state and config within a git repo in a special branch.
*
* @author u206123 (Florian Seidl)
* @since 0.0.6, 2016.
*/
@Slf4j
@Component
@Profile("!file")
@AllArgsConstructor(access = AccessLevel.PACKAGE)
@NoArgsConstructor
public class GitStateStore implements StateStore {
@Autowired
private GitClient gitClient;
@Autowired
private StateStoreConfig storeConfig;
private boolean resetOnStartup = true;
@Override
public void writeReleaseStatus(final ReleaseState releaseState) {
GitRepo gitRepo = gitRepo();
gitRepo.cloneOrPull();
log.debug("Writing releaseState {}", releaseState);
new StateFileWriter(gitRepo.directory()).write(releaseState);
log.info("Wrote releaseState for release={}", releaseState.getReleaseName());
gitRepo.addCommitPush();
}
@Override
public ReleaseState readReleaseStatus(final String releaseIdentifier) {
GitRepo gitRepo = gitRepo();
gitRepo.cloneOrPull();
ReleaseState releaseState = new StateFileReader(gitRepo.directory()).read(releaseIdentifier);
log.info("Read releaseState for release={}", releaseIdentifier);
log.debug("Read releaseState={}", releaseState);
return releaseState;
}
private GitRepo gitRepo() {
GitRepo repo = gitClient.gitRepo(storeConfig.getUrl(), storeConfig.getBranch(), storeConfig.getUser(), storeConfig.getPassword());
// reset if requested and set resetOnStartup to false, so reset is done only at the beginning
if (this.resetOnStartup) {
repo.reset();
this.resetOnStartup = false;
}
return repo;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy