release-please-action
release-please-action copied to clipboard
Release Please action taking a long time to complete
TL;DR
After adding an iconography package, release actions take a long time to make a decision and thus complete the action task. Previously the task would complete in less than 1 minute and now it is taking 6m+.
The icons are based on the material set and that package has over 20k files.
Expected behavior
We are able to complete release please actions in an acceptable time
Observed behavior
The task is taking a long time to complete
Action YAML
name: Release Tracker New
on:
push:
branches:
- main
env:
NPM_AUTH_TOKEN: ${{ secrets.GH_PACKAGE_PUBLISH }}
jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: google-github-actions/release-please-action@v3
with:
command: manifest
token: ${{secrets.GH_PACKAGE_PUBLISH}}
Log output
✔ Collecting commits since all latest releases
⚠ Found release tag with component 'bungalow-icons-material', but not configured in manifest
⚠ Found 3000 files. This may not include all the files.
⚠ Found 3000 files. This may not include all the files.
✔ PR #104 has many files, backfilling
⚠ Found 3000 files. This may not include all the files.
✔ PR #102 has many files, backfilling
⚠ Found 3000 files. This may not include all the files.
Additional information
I even tried to remove the icon package from the release please configuration but still, it is seems it is getting hung up on the fact the monorepo has a package with 20k files in it.
I also tried to use a fixed sha for both bootstrap-sha and last-release-sha but no change in completion time for the release please task.
release-please-config.json
{
"release-type": "node",
"monorepo-tags": true,
"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": true,
"prerelease": true,
"separate-pull-requests": true,
"packages": {
"./packages/components": {
"package-name": "@statestitle/bungalow"
},
"./packages/icons": {
"package-name": "@statestitle/bungalow-icons"
},
"./packages/tokens": {
"package-name": "@statestitle/bungalow-tokens"
}
}
}
.release-please-manifest.json
{
"./packages/components": "1.0.0-alpha.37",
"./packages/icons": "1.0.0-alpha.1",
"./packages/tokens": "1.0.0-alpha.37"
}
Release-Please needs to look at files touched in each commit to decide which commits apply to which components. Currently, everything uses the GitHub API for all the data -- it can take multiple API calls to fetch all the filenames. This is an inherent limitation of release-please. Additionally, the GitHub API won't return more than the first 3000 files modified so it can possibly miss including a commit for a component (if a missed file is not within the first 3000 files).
Are all these new files necessary to check-in (are they vendored dependencies)?
A long-term (and very large amount of work) would be to have a (optional) alternate implementation of how release-please gets data that uses a local clone of the repository. This would also potentially take a long time as well to clone very large repositories and be fragile to git runtime version.
Unfortunately, these files need to be committed. They are the actual icons. From the MUI Material UI set you can see they also have 10k icons in their codebase and another 10k of typescript definition files.
https://github.com/mui/material-ui/tree/master/packages/mui-icons-material/lib