Ejemplo n.º 1
0
    private async Task PublishPayloadAsync(DeployPayload payload)
    {
        IOctopusAsyncClient client = await this._octopusClientFactory.CreateAsyncClient(this._octopusServerEndpoint);

        string serverUri     = payload.ServerUri;
        string spaceId       = payload.Event?.SpaceId ?? "Spaces-1";
        string?projectId     = FindDocumentId(payload: payload, documentPrefix: "Projects-");
        string?releaseId     = FindDocumentId(payload: payload, documentPrefix: "Releases-");
        string?environmentId = FindDocumentId(payload: payload, documentPrefix: "Environments-");
        string?deploymentId  = FindDocumentId(payload: payload, documentPrefix: "Deployments-");
        string?tenantId      = FindDocumentId(payload: payload, documentPrefix: "Tenants-");

        ProjectResource?project = await client.Repository.Projects.Get(projectId);

        ReleaseResource?release = await client.Repository.Releases.Get(releaseId);

        EnvironmentResource?environment = await client.Repository.Environments.Get(environmentId);

        TenantResource?tenant = null;

        if (!string.IsNullOrWhiteSpace(tenantId))
        {
            tenant = await client.Repository.Tenants.Get(tenantId);
        }

        string?projectName     = NormalizeProjectName(project: project, projectId: projectId);
        string?environmentName = NormaliseEnvironmentName(environment: environment, environmentId: environmentId, out bool releaseNoteWorthy, out string?tenantName);
        string?releaseVersion  = release != null
            ? release.Version
            : releaseId;

        if (tenant != null)
        {
            tenantName = NormaliseTenantName(tenant);
        }

        if (projectName == null || releaseVersion == null || environmentName == null)
        {
            // no idea what we're releasing if it has none of the above.
            return;
        }

        bool succeeded = HasSucceeded(payload);

        EmbedBuilder builder = BuildMessage(projectName: projectName, releaseVersion: releaseVersion, environmentName: environmentName, tenantName: tenantName, release: release, succeeded: succeeded);

        AddDeploymentId(serverUri: serverUri, deploymentId: deploymentId, builder: builder, spaceId: spaceId);

        AddDeploymentDetails(builder: builder, projectName: projectName, releaseVersion: releaseVersion, environmentName: environmentName, tenantName: tenantName);

        await this._bot.PublishAsync(builder);

        if (succeeded && releaseNoteWorthy)
        {
            await this._bot.PublishToReleaseChannelAsync(builder);
        }
    }
Ejemplo n.º 2
0
    private static string?FindDocumentId(DeployPayload payload, string documentPrefix)
    {
        IReadOnlyList <string>?relatedDocumentIds = payload.Event?.RelatedDocumentIds;

        return(relatedDocumentIds?.FirstOrDefault(x => x.StartsWith(value: documentPrefix, comparisonType: StringComparison.OrdinalIgnoreCase)));
    }