Skip to content

Commit

Permalink
Add posibility to sync all repositories in organization 'A' from repo…
Browse files Browse the repository at this point in the history
…sitory in organization 'B'
  • Loading branch information
Peter Malik committed Jul 18, 2018
1 parent 58e0536 commit b5754c5
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 16 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ Synchronizer working well for cloud `GitHub.com` and also for on-premise version
Open command prompt and execute with **all** parameters.

**_Example when we want synchronize labels across all organization repositories:_**
> `MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName>`
> `MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> [-target-org=<OrganisationName>] [-strict=<true|false>]`
**_Example when we want synchronize labels only in specific repository from specific repository:_**
> `MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> -target-repo=<RepositoryName>`
> `MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> [-target-org=<OrganisationName>] -target-repo=<RepositoryName> [-strict=<true|false>]`
**_or when repositories are not in the same organization:_**
> `MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> -target-org=<OrganisationName> -target-repo=<RepositoryName>`
> `MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> -target-org=<OrganisationName> -target-repo=<RepositoryName> [-strict=<true|false>]`
## Parameters
`-uri=` - this parameter defines GitHub server Uri <br/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<Version>0.1.1</Version>
<Version>0.2.0</Version>
<Authors>MalikP.</Authors>
<Company>MalikP.</Company>
<Description>Imagine that you have lot of repositories in your account and you want to have in all repositories the same label names, descriptions and colors. You can prepare labels in one repository and then use this repository as reference one. This tool will synchronize these labels and create in all other organization repositories.</Description>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,20 @@ static async Task Main(string[] args)
{
ISynchronizer Synchronizer = new DefaultSynchronizer(_logger, await parameterStore.QueryParameterAsync<UriParameter>(), await parameterStore.QueryParameterAsync<OautTokenParameter>());

OrganizationNameParameter sourceOrganizationNameParameter = await parameterStore.QueryParameterAsync<SourceOrganizationNameParameter>();
OrganizationNameParameter targetOrganizationParameter = await parameterStore.QueryParameterAsync<TargetOrganizationNameParameter>() ?? sourceOrganizationNameParameter;

SourceRepositoryNameParameter sourceRepositoryNameParameter = await parameterStore.QueryParameterAsync<SourceRepositoryNameParameter>();
TargetRepositoryNameParameter targetRepositoryNameParameter = await parameterStore.QueryParameterAsync<TargetRepositoryNameParameter>();

StrictFlagParameter strictFlagParameter = await parameterStore.QueryParameterAsync<StrictFlagParameter>();

if (targetRepositoryNameParameter == null)
{
await Synchronizer.SynchronizeAsync(await parameterStore.QueryParameterAsync<OrganizationNameParameter>(), await parameterStore.QueryParameterAsync<SourceRepositoryNameParameter>(), strictFlagParameter);
await Synchronizer.SynchronizeAsync(sourceOrganizationNameParameter, sourceRepositoryNameParameter, targetOrganizationParameter, strictFlagParameter);
}
else
{
var sourceOrganizationNameParameter = await parameterStore.QueryParameterAsync<SourceOrganizationNameParameter>();
OrganizationNameParameter targetOrganizationParameter = (OrganizationNameParameter)await parameterStore.QueryParameterAsync<TargetOrganizationNameParameter>() ?? sourceOrganizationNameParameter;
await Synchronizer.SynchronizeAsync(sourceOrganizationNameParameter, await parameterStore.QueryParameterAsync<SourceRepositoryNameParameter>(), targetOrganizationParameter, targetRepositoryNameParameter, strictFlagParameter);
}
}
Expand Down Expand Up @@ -91,15 +94,15 @@ private static Task WriteHelpAsync()

_logger.WriteLog("", ConsoleColor.Green);
_logger.WriteLog("Example when we want synchronize labels across all organization repositories: ", ConsoleColor.Cyan);
_logger.WriteLog($"{"".PadLeft(7, ' ')} MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName>", ConsoleColor.Green);
_logger.WriteLog($"{"".PadLeft(7, ' ')} MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> [-target-org=<OrganisationName>] [-strict=<true|false>]", ConsoleColor.Green);

_logger.WriteLog("", ConsoleColor.Green);
_logger.WriteLog("Example when we want synchronize labels only in specific repository from specific repository: ", ConsoleColor.Cyan);
_logger.WriteLog($"{"".PadLeft(7, ' ')} MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> -target-repo=<RepositoryName>", ConsoleColor.Green);
_logger.WriteLog($"{"".PadLeft(7, ' ')} MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> [-target-org=<OrganisationName>] -target-repo=<RepositoryName> [-strict=<true|false>]", ConsoleColor.Green);

_logger.WriteLog("", ConsoleColor.Green);
_logger.WriteLog("Example when we want synchronize labels only in specific repository from specific repository and both are in different organizations: ", ConsoleColor.Cyan);
_logger.WriteLog($"{"".PadLeft(7, ' ')} MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> -target-org=<OrganisationName> -target-repo=<RepositoryName>", ConsoleColor.Green);
_logger.WriteLog($"{"".PadLeft(7, ' ')} MalikP.GitHub.LabelSynchronizer -uri=https://github.domain.com/ -token=<personalToken> -source-org=<OrganisationName> -source-repo=<RepositoryName> -target-org=<OrganisationName> -target-repo=<RepositoryName> [-strict=<true|false>]", ConsoleColor.Green);

_logger.WriteLog($"{"".PadLeft(86, '#')}", ConsoleColor.Red);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<Version>0.1.1</Version>
<Version>0.2.0</Version>
<Authors>MalikP.</Authors>
<Company>MalikP.</Company>
<Product>MalikP. GitHub Label Synchronizer</Product>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,15 @@ public DefaultSynchronizer(IConsoleLogger consoleLogger, UriParameter gitHubUriP
{
}

public override async Task SynchronizeAsync(OrganizationNameParameter organizationLoginNameParameter,
public override async Task SynchronizeAsync(OrganizationNameParameter sourceOrganizationNameParameter,
RepositoryNameParameter repositoryNameParameter,
OrganizationNameParameter targetOrganizationNameParameter,
StrictFlagParameter strictFlagParameter)
{
Repository sourceRepository = await GitHubClient.Repository.Get(organizationLoginNameParameter.Value, repositoryNameParameter.Value);
Repository sourceRepository = await GitHubClient.Repository.Get(sourceOrganizationNameParameter.Value, repositoryNameParameter.Value);

Organization organization = await GitHubClient.Organization
.Get(organizationLoginNameParameter.Value);
.Get(targetOrganizationNameParameter.Value);
IReadOnlyList<Repository> repositories = await GetRepositoriesAsync(sourceRepository, organization);

await SynchronizeRepositoriesLabels(strictFlagParameter, sourceRepository, repositories);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ namespace MalikP.GitHub.LabelSynchronizer.Synchronization
{
public interface ISynchronizer
{
Task SynchronizeAsync(OrganizationNameParameter organizationLoginNameParameter, RepositoryNameParameter repositoryNameParameter, StrictFlagParameter strictFlagParameter);
Task SynchronizeAsync(OrganizationNameParameter sourceOrganizationNameParameter, RepositoryNameParameter repositoryNameParameter, OrganizationNameParameter targetOrganizationNameParameter, StrictFlagParameter strictFlagParameter);
Task SynchronizeAsync(OrganizationNameParameter sourceOrganizationLoginNameParameter, RepositoryNameParameter sourceRepositoryNameParameter, OrganizationNameParameter targetOrganizationLoginNameParameter, RepositoryNameParameter targetRepositoryNameParameter, StrictFlagParameter strictFlagParameter);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ protected void WriteLog(string message, ConsoleColor color)
_logger.WriteLog(message, color);
}

public abstract Task SynchronizeAsync(OrganizationNameParameter organizationLoginNameParameter, RepositoryNameParameter repositoryNameParameter, StrictFlagParameter strictFlagParameter);
public abstract Task SynchronizeAsync(OrganizationNameParameter sourceOrganizationNameParameter, RepositoryNameParameter repositoryNameParameter, OrganizationNameParameter targetOrganizationNameParameter, StrictFlagParameter strictFlagParameter);
public abstract Task SynchronizeAsync(OrganizationNameParameter sourceOrganizationLoginNameParameter, RepositoryNameParameter sourceRepositoryNameParameter, OrganizationNameParameter targetOrganizationLoginNameParameter, RepositoryNameParameter targetRepositoryNameParameter, StrictFlagParameter strictFlagParameter);
}
}

0 comments on commit b5754c5

Please sign in to comment.