Release 0.38.0 of Spellcheck (GitHub) Action - yet another maintenance release
Tags: githubaction, opensource, release
Published: 2024-06-13 16:24:54

---
title: Release 0.38.0 of Spellcheck (GitHub) Action - yet another maintenance release
published: true
description: The base images are always on the move
tags: githubaction, opensource, release
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
# published_at: 2024-03-03 13:59 +0000
---
Today I released version [0.38.0](https://github.com/rojopolis/spellcheck-github-actions/releases/tag/0.38.0) of the GitHub Action for doing spelling checking of your documentation etc. for which I am the current maintainer.

- Docker base image bumped to Python 3.12.4

As mentioned in [the announcement](https://dev.to/jonasbn/release-0370-of-spellcheck-github-action-yet-another-maintenance-release-2dj9) for the previous release (`0.37.0`) the release process requires lot of steps. With this release it was made almost entirely using the mentioned Perl script.

The current version here:

```perl
#!/usr/bin/env perl

use warnings;
use strict;
use v5.10.0;

my $version = $ARGV[0];

if (not $version) {
    die 'Usage build.pl <version>';
}

say "Building Docker images for version: $version";

my @targets = qw(v0 latest);

push @targets, $version;

say 'Building Docker images for amd64 architecture';

my $counter = 0;
my $total = scalar @targets;

foreach my $target (@targets) {
    say "Building $target ($counter/$total)";
    system "docker build --platform linux/amd64 --tag jonasbn/github-action-spellcheck:$target .";
    $counter++;
}

$counter = 0;

say "Pushing Docker images to DockerHub";
foreach my $target (@targets) {
    say "Pushing $target ($counter/$total)";
    system "docker push jonasbn/github-action-spellcheck:$target";
    $counter++;
}

# Updating the v0 tag
say 'Deleting existing tag v0 locally';
say 'git tag --delete v0';
system 'git tag --delete v0';

say 'Deleting existing tag v0 remotely';
say 'git push --delete origin v0';
system 'git push --delete origin v0';

say 'Tagging also as v0';
say 'git tag --annotate v0 --message "Tagging v0"';
system 'git tag --annotate v0 --message "Tagging v0"';

# Pushing tags
say 'Pushing tags';
say 'git push --tags';
system 'git push --tags';

# The tagging of the version number is a part of the release process, so not need
# to create this tag separately
say 'Creating release on GitHub with auto generated release notes and discussion';
system "gh release create $version --discussion-category 'General' --generate-notes";

exit 0;
```

REF: [GitHub](https://github.com/rojopolis/spellcheck-github-actions/blob/master/scripts/build.pl)

This script is run like this:

```bash
$ perl scripts/build.pl 0.38.0
```

The script takes a version number and basically automate large parts of [the release process outlined in the wiki](https://github.com/rojopolis/spellcheck-github-actions/wiki/Releasing).

First it adds the version number to a list of tags, which are the images we want to build.

So we build:

- `0.38.0` (the number provided as an argument
- `v0` our canonical version, since we want it to point to the latest release (see: [the version number notes in the wiki](https://github.com/rojopolis/spellcheck-github-actions/wiki/Versioning)
- `latest` a symbolic tag, point to the latest release

Next the 3 freshly build Docker images are pushed to DockerHub.

We then delete the current `v0` Git tag locally and remotely.

Then we tag `v0` again, locally and remotely. 

Finally we _cheat_ and use `gh` (the GitHub CLI client).

Using this we create a release, open a discussion and I found out with the previous release, it actually creates the version tag, in this example meaning: `0.38.0`.

The script might not be completely rock-solid, I am thinking about using Perl's [autodie](https://metacpan.org/pod/autodie), which I would perhaps be a good fit in this context.

I still have a few manual steps.

- The examples in README.md reflect the version to be released
- The version pointed to in `action.yml` reflect the version to be released

Which can also be solved programmatically.

Finally as mentioned in the previous post, instead of a script a GitHub Action would be a preferable solution.

Ideas, PRs, bug reports and general feedback always welcome

## Change Log

### 0.38.0, 2024-06-13, maintenance release, update not required

- Docker image updated to Python 3.12.4 slim via PR [#202](https://github.com/rojopolis/spellcheck-github-actions/pull/202) from Dependabot. [Release notes for Python 3.12.4](https://docs.python.org/release/3.12.4/whatsnew/changelog.html)