actions / typescript-action

Create a TypeScript Action with tests, linting, workflow, publishing, and versioning
https://github.com/actions
MIT License
2k stars 473 forks source link

Make the release script update the package.json version #854

Open 2zqa opened 8 months ago

2zqa commented 8 months ago

I think it would be useful if the release script would also automatically set the version of package.json to the newly specified version. Currently one must remember to update this before running the release script. Alternatively, the script could be updated to check if the newly specified version is the same as the version in package.json.

2zqa commented 8 months ago

This might be more complicated than I anticipated - this would also include updating the package-lock.json file, along with committing and pushing these changes on behalf of the user. Still leaving this issue up to gather opinions.

EDIT: to simplify this PR, it might suffice to add a warning/notice for the user to update their package.json and package-lock.json files before running the script.

ncalteen commented 8 months ago

Hi @2zqa 👋

Thanks for the input! I do agree that it would be useful, however as you've noticed there are some complications involved with updating the package.json and package-lock.json. Additionally, developers may be using other runtimes, so it may not work correctly in those cases.

As an alternative, I maintain a separate action, issue-ops/semver that can be used as a PR check to confirm that the version has been updated before a PR is merged. A usage example is below:

# This workflow checks the version of the application package that is being
# built in the current pull request. If the version has already been published,
# the workflow fails to prevent PRs from being merged until the version has been
# incremented in the manifest file.
name: Version Check

on:
  pull_request:
    branches:
      - main

env:
  MANIFEST_PATH: package.json

permissions:
  checks: write
  contents: read
  pull-requests: write

jobs:
  check-version:
    name: Version Check
    runs-on: ubuntu-latest

    if: ${{ github.actor != 'dependabot[bot]' }}

    steps:
      # The fetch-depth and fetch-tags options are required
      - name: Checkout
        id: checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          fetch-tags: true

      - name: Check Version
        id: check-version
        uses: issue-ops/semver@v0.2.2
        with:
          check-only: true
          manifest-path: ${{ env.MANIFEST_PATH }}

The end result is the Version Check job is added as a PR check that fails if the version in package.json is already present in the repository tags.

Image

You would need to then need to enable the Require status checks to pass before merging option in your branch protection rules.

Let me know if that helps you!

2zqa commented 8 months ago

This is a great solution, thanks! I added it to my repo. It's great that I now know about this, should we now also advertise this in the README of this project? Or is that overreaching?

ncalteen commented 8 months ago

I'm glad you like it :D Feel free to drop in any feedback/questions int he repo! As far as including in these templates, I am checking with the Actions team to get their thoughts. If they're good with it, I will update the template action repos to all include automatic release management :)

developer982 commented 4 months ago

I think it would be useful if the release script would also automatically set the version of package.json to the newly specified version. Currently one must remember to update this before running the release script. Alternatively, the script could be updated to check if the newly specified version is the same as the version in package.json.