All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.dangernoodle.grt.steps.SetRepositoryOptions Maven / Gradle / Ivy

package io.dangernoodle.grt.steps;

import java.io.IOException;

import org.kohsuke.github.GHRepository;

import io.dangernoodle.grt.GithubClient;
import io.dangernoodle.grt.Repository;
import io.dangernoodle.grt.Workflow.Context;
import io.dangernoodle.grt.Workflow.Status;
import io.dangernoodle.grt.internal.GithubWorkflow;


public class SetRepositoryOptions extends GithubWorkflow.Step
{
    public SetRepositoryOptions(GithubClient client)
    {
        super(client);
    }

    @Override
    public Status execute(Repository repository, Context context) throws IOException
    {
        GHRepository ghRepo = context.getGHRepository();
        boolean archived = repository.getSettings().isArchived();

        if (archived)
        {
            return archive(ghRepo);
        }

        if (!archived && ghRepo.isArchived())
        {
            logger.error("unarchiving of projects must first be done via github, no further github actions will be taken!");
            return Status.SKIP;
        }

        logger.info("configuring repository settings and options");
        // store the updated object back into the context
        context.add(updateRepositoryOptions(repository, ghRepo));

        return Status.CONTINUE;
    }

    private Status archive(GHRepository ghRepo) throws IOException
    {
        if (!ghRepo.isArchived())
        {
            logger.debug("sending archive request to github...");
            ghRepo.archive();
        }

        logger.warn("repository is archived, no further github actions will be taken!");
        return Status.SKIP;
    }

    private GHRepository updateRepositoryOptions(Repository repository, GHRepository ghRepo)
        throws IOException
    {
        boolean update = false;

        GHRepository.Updater updater = ghRepo.update();
        Repository.Settings settings = repository.getSettings();

        if (repository.getDescription() != ghRepo.getDescription())
        {
            update = true;
            updater.description(repository.getDescription());
        }

        if (repository.getHomepage() != ghRepo.getHomepage())
        {
            update = true;
            updater.homepage(repository.getHomepage());
        }

        if (settings.deleteBranchOnMerge() != ghRepo.isDeleteBranchOnMerge())
        {
            update = true;
            updater.deleteBranchOnMerge(settings.deleteBranchOnMerge());
        }

        if (settings.enableMergeCommits() != ghRepo.isAllowMergeCommit())
        {
            update = true;
            updater.allowMergeCommit(settings.enableMergeCommits());
        }

        if (settings.enableRebaseMerge() != ghRepo.isAllowRebaseMerge())
        {
            update = true;
            updater.allowRebaseMerge(settings.enableRebaseMerge());
        }

        if (settings.enableSquashMerge() != ghRepo.isAllowSquashMerge())
        {
            update = true;
            updater.allowSquashMerge(settings.enableSquashMerge());
        }

        if (settings.enableIssues() != ghRepo.hasIssues())
        {
            update = true;
            updater.issues(settings.enableIssues());
        }

        if (settings.enableWiki() != ghRepo.hasWiki())
        {
            update = true;
            updater.wiki(settings.enableWiki());
        }

        if (settings.isPrivate() != ghRepo.isPrivate())
        {
            update = true;
            updater.private_(settings.isPrivate());
        }

        return update ? updater.done() : ghRepo;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy