Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Support for independent releases in monorepo #195

Open
daljitsharma opened this issue Nov 26, 2023 · 4 comments
Open

Feature: Support for independent releases in monorepo #195

daljitsharma opened this issue Nov 26, 2023 · 4 comments

Comments

@daljitsharma
Copy link

daljitsharma commented Nov 26, 2023

Problem:

We have a monorepo with multiple projects inside of it. These projects are completely unrelated with each other. We have workflows to tag and release these projects but these workflows only run when there is push to certain folder in the monorepo. For example say we have project1/ and project2/ folders in the monorepo, we can have this workflow to tag and release project1:

name: Tag and release Project1

on:
  push:
    branches:
      - main
     paths:
      - "project1/**"

jobs:
  create-tag-and-release:
    name: Tag and release component
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Bump version and push tag
      id: tag_version
      uses: mathieudutour/github-tag-action@v6.1
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        tag_prefix:   project1-v
    - name: Create a GitHub release
      uses: ncipollo/release-action@v1
      with:
        tag: ${{ steps.tag_version.outputs.new_tag }}
        name: Release ${{ steps.tag_version.outputs.new_tag }}
        body: ${{ steps.tag_version.outputs.changelog }}

And a similar workflow for project2 just replacing anywhere it says project1 with project2. This works great, especially since the tag_prefix can figure out the correct release and bump based on that. The problem is all commits in the repo are used to make the release even if they are unrelated. So if we:

  1. push commit changing files in project1 folder with "feat:" flag -> only project1 workflow runs -> new release for project1 will have minor version upgrade
  2. push commit changing files in project2 folder with "fix:" flag -> only project2 workflow runs -> new release for project2 will have minor version upgrade since it is reading all the commits since the last release. The commit that was used to trigger the project1 workflow / release is also used here to determine version.

One possible solution (view comments for better possible solution with paths):

We have a strict github merge structure on the monorepos where all PRs are squashed and merged into main as 1 commit. Ideally, if there could be a flag to not view all commits since the last release, but only view the current commit to figure out the proper bump, it would solve our problem. We could have different releases in our monorepo that are not affected by each other

@daljitsharma daljitsharma changed the title Feature Feature: Only use latest, single commit to figure out version bump Nov 26, 2023
@daljitsharma
Copy link
Author

Coincidentally, I see someone made a pull request for this issue with a different (better) solution: #193

@mbarnett-jones
Copy link

mbarnett-jones commented Nov 28, 2023

This also looks like another approach: #196 though I think I prefer path filtering as the onus isn't on the engineer to add the correct scope.

@wnz99
Copy link

wnz99 commented Dec 3, 2023

This would be really useful. I agree with @mbarnett-jones, I also would prefer path filtering.

@daljitsharma daljitsharma changed the title Feature: Only use latest, single commit to figure out version bump Feature: Support for independent releases in monorepo Dec 7, 2023
@daljitsharma
Copy link
Author

@mathieudutour would love your input on this. Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants