createRelease method

Future<Release> createRelease(
  1. RepositorySlug slug,
  2. CreateRelease createRelease, {
  3. bool getIfExists = true,
})

Creates a Release based on the specified createRelease.

If getIfExists is true, this returns an already existing release instead of an error. Defaults to true. API docs: https://developer.github.com/v3/repos/releases/#create-a-release

Implementation

Future<Release> createRelease(
  RepositorySlug slug,
  CreateRelease createRelease, {
  bool getIfExists = true,
}) async {
  ArgumentError.checkNotNull(slug);
  ArgumentError.checkNotNull(createRelease);
  final release = await github.postJSON<Map<String, dynamic>, Release>(
      '/repos/${slug.fullName}/releases',
      convert: (i) => Release.fromJson(i),
      body: GitHubJson.encode(createRelease.toJson()),
      statusCode: StatusCodes.CREATED);
  if (release.hasErrors) {
    final alreadyExistsErrorCode = release.errors!.firstWhere(
      (error) => error['code'] == 'already_exists',
      orElse: () => null,
    );
    if (alreadyExistsErrorCode != null) {
      final field = alreadyExistsErrorCode['field'];
      if (field == 'tag_name') {
        return getReleaseByTagName(slug, createRelease.tagName);
      }
    } else {
      print(
          'Unexpected response from the API. Returning response. \n Errors: ${release.errors}');
    }
  }
  return release;
}