using static Facepunch.Constants;
namespace Facepunch.Steps;
internal class SentryRelease( string name, string org, string project ) : Step( name )
{
public string Organization { get; } = org;
public string Project { get; } = project;
protected override ExitCode RunInternal()
{
try
{
string version = Utility.VersionName();
Log.Info( $"Creating Sentry release for version {version}..." );
var projectStr = $"--project {Project}";
bool success;
// Create new release
Log.Info( "Creating new release" );
success = RunSentryCommand( $"releases new \"{version}\" --org \"{Organization}\" {projectStr}" );
if ( !success ) return ExitCode.Failure;
// Set commits
Log.Info( "Setting commits" );
success = RunSentryCommand( $"releases set-commits \"{version}\" --auto --org \"{Organization}\" {projectStr}" );
if ( !success ) return ExitCode.Failure;
// Create deploy
Log.Info( "Creating deploy" );
success = RunSentryCommand( $"releases deploys \"{version}\" new -e retail --org \"{Organization}\" {projectStr}" );
if ( !success ) return ExitCode.Failure;
// Finalize release
Log.Info( "Finalizing release" );
success = RunSentryCommand( $"releases finalize \"{version}\" --org \"{Organization}\" {projectStr}" );
if ( !success ) return ExitCode.Failure;
Log.Info( "Successfully created and finalized Sentry release" );
return ExitCode.Success;
}
catch ( Exception ex )
{
Log.Error( $"Sentry release creation failed with error: {ex}" );
return ExitCode.Failure;
}
}
///
/// Runs a Sentry CLI command with the appropriate auth token from environment variables
///
public static bool RunSentryCommand( string arguments, string workingDirectory = null )
{
var token = Environment.GetEnvironmentVariable( "SENTRY_AUTH_TOKEN" );
if ( string.IsNullOrEmpty( token ) )
{
Log.Warning( "SENTRY_AUTH_TOKEN was empty" );
return false;
}
// Create a custom environment variable dictionary for the auth token
var envVars = new Dictionary
{
{ "SENTRY_AUTH_TOKEN", token }
};
return Utility.RunProcess(
"sentry-cli.exe",
arguments,
workingDirectory,
envVars,
30000
);
}
}