release-please-action icon indicating copy to clipboard operation
release-please-action copied to clipboard

Release Please action taking a long time to complete

Open alansouzati opened this issue 3 years ago • 3 comments

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.

alansouzati avatar Jul 26 '22 01:07 alansouzati

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"
}

alansouzati avatar Jul 26 '22 01:07 alansouzati

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.

chingor13 avatar Jul 26 '22 16:07 chingor13

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

alansouzati avatar Jul 26 '22 23:07 alansouzati