Re: [PATCH 1/1] ci: new github-action for git-l10n code review
- From
Jiang Xin <worldhello.net@gmail.com>
- Date
- Aug 26, 2021, 02:25 UTC
- Message-ID
- <CANYiYbG7VD5SQuSiO9pAf2YEgC5X8dOczJKunTbBoxvkfGGVrA@mail.gmail.com>
- In-Reply-To
- <nycvar.QRO.7.76.6.2108251316540.55@tvgsbejvaqbjf.bet>
Hi Dscho,
On Wed, Aug 25, 2021 at 8:14 PM Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
Show 32 quoted lines
> > Yes, this is a solution I also want to try at the very beginning. But
> > some l10n team leaders may fork their repositories directly from
> > git/git, and name their repo as "{OWNER}/git". I want to try another
> > solution: check existence of file "ci/config/allow-l10n" in branch
> > "ci-config" using a GitHub API, instead of cloning the ci-config
> > branch and execute the shell script "ci/config/allow-l10n".
>
> I understood that you were trying to imitate what git/git does.
>
> The problem, in git/git as well as in your patch, is that this is highly
> cumbersome to use. Yes, it would be better if there was an easier UI to do
> what you want to do, but the current reality is: there isn't.
>
> The main reason why it is so cumbersome to use is that your chosen
> strategy scatters the CI configuration so much that it puts a mental
> burden on the users. I, for one, have no idea what is currently in my
> `ci-config` branch. And new users will be forced to struggle to set up
> their fork in such a way that the configuration does what they want it to
> do.
>
> And in this instance, there is not even any good reason to make it hard on
> the users because most will likely not need that new workflow at all. That
> workflow is primarily interesting for the l10n maintainers.
>
> To make it easier on the vast majority of contributors, I therefore
> suggested to introduce an easy-to-parse condition that lives not only in
> the same branch but in the very same file as the workflow _and_ it does
> what most users need it to do: cognitive burden penalty averted!
>
> Even better: the condition I suggested can be _easily_ extended by the few
> l10n maintainers to include their particular for as target repository.
>I agree with you that the "ci-config" job is cumbersome to use, and I will follow your suggestions. I may also want to try to implement a github action later to check the existence of a file in a branch using GitHub API as an supplementary way.
Show 33 quoted lines
> > > A couple more questions/suggestions are below: > > > > > > > + git-po-helper: > > > > + needs: ci-config > > > > + if: needs.ci-config.outputs.enabled == 'yes' > > > > + runs-on: ubuntu-latest > > > > + steps: > > > > + - uses: actions/checkout@v2 > > > > + with: > > > > + fetch-depth: '0' > > > > > > There is code below to specifically fetch the base commit, but setting the > > > `fetch-depth` to zero means to do a full clone anyway. > > > > > > So maybe the `git fetch` code below should be dropped, or the > > > `fetch-depth` override? > > > > > > Since we cannot know how deep we need to fetch, though, I figure that it > > > would be indeed better to have a non-shallow clone (and a code comment > > > would help clarify this). > > > > If we want do a shallow clone, maybe we can try like this: > > > > 1. Make 'git-po-helper' works with a bare repository, so the initial clone > > can be a shallow bare repository without checkout. > > 2. Will get two revisions, base and head revision, when the workflow is > > triggered. (In patch v1, base and head revision are named as > > commit_from and commit_to) > > 3. Fetch the base revision and head revision using command: > > git fetch origin --depth=100 <base> <head> > > > > We used a fixed depth 100, because we don't know how many commits > > these two revisions are diverged.
Wrong tense. My English! :sweat: s/We used a fixed depth 100/I plan to use a fixed depth of 100/
> > Okay, but you did not use a fixed depth 100: you used depth 0, which turns > off shallow clones in actions/checkout. >
Show 12 quoted lines
> > If you truly want to optimize the fetch (which I don't think is worth the > effort, as I mentioned above), you could also start with a shallow clone, > then call > > git config remote.origin.promisor true > git config remote.origin.partialCloneFilter blob:none > rm .git/shallow > > Subsequent Git operations should transparently fetch whatever is missing. > > But again, this strikes me as seriously premature optimization.
I like this. Will try.
And I wonder it would be better if the action "actions/checkout" can support "fetch-depth: -1". Which means it does not do fetch at all, but only sets the correct ssh_key and auth token.
Show 19 quoted lines
> > The action "mshick/add-pr-comment@v1" needs this token. See: > > https://github.com/mshick/add-pr-comment . > > Yes, I am fully aware. > > What I tried to point out is that the `GITHUB_TOKEN` you receive _may_ > have write permissions (it used to be the default), but these days you can > configure it to be read-only, as a repository admin. For details, see > https://github.blog/changelog/2021-04-20-github-actions-control-permissions-for-github_token/#setting-the-default-permissions-for-the-organization-or-repository > > If GITHUB_TOKEN is configured to be read-only (which I, for one, do with > all repositories I can, for security reasons), then `add-pr-comment` might > fail. > > This was the case for the `check-whitespace` workflow on > git-for-windows/git, which is why I fixed that workflow in cc00362125c > (ci(check-whitespace): stop requiring a read/write token, 2021-07-14). > > It would not make sense to re-introduce the same issue in a new workflow.
I understand your concern. I will setup read only permission for github action for the repo.
Show 62 quoted lines
> > > Instead, it would probably make more sense to keep the output in the logs > > > of the workflow run. > > > > You can see this nice post from ecco: > > https://github.community/t/github-actions-are-severely-limited-on-prs/18179 > > Oh, I am aware of the problem. Probably a lot more than you think I am. > After all, I introduced the Azure Pipeline definition which offered not > only a very convenient way to get to the logs of failed test cases, but > also had statistics on flaky tests, and allowed monitoring all kinds of > insights. > > And GitHub workflows have none of that. > > At least at the moment. If you want to investigate a test failure, you > have to open the failed run, but that won't get you to the right spot yet. > Instead, it opens the log of the `prove` run, which only tells you which > test script(s) failed. > > What you _then_ have to do is to expand the `ci/print-test-failures.sh` > step (which _succeeded_ and hence it is not expanded by default) and then > you have to click on the magnifying glass symbol (i.e. _not_ use your > browser's "Find" functionality, that won't work) and search for "not ok" > and then skim over all `# known breakage` entries. > > So yes, I do know about the (current) limitations of the GitHub workflows > UI ;-) > > > For a successful git-l10n workflow, there are no errors, but may have > > warnings for possible typos found in a ".po" file. There may be lots > > of false positives in these warnings. If I hide these warnings in the > > log of a workflow, git-l10n contributors may not notice them. So I > > need a way to create comments in pull requests. > > Or the workflow runs need to fail, and PRs need to require those runs to > pass. > > > See some typical code reviews for git-l10n: > > > > * https://github.com/git-l10n/git-po/pull/541 > > * https://github.com/git-l10n/git-po/pull/555 > > Thank you for linking those! Now that you said it, I thought about a > different strategy we're using in the Git for Windows project (where we > have a scheduled workflow that monitors a few of the 150 components > bundled in Git for Windows' installer, to get notified if there are new > versions, and the workflow needs write permission in order to open new > tickets). We use an environment secret (and environments can be limited > appropriately, e.g. by requiring approvals from a specific team). For > details, see > https://github.com/git-for-windows/git/commit/1abb4477f462c3d155ec68d40c961a5e0604ddf8 > > I could imagine that you could make your workflow contingent on the > presence of, say, `GIT_PO_HELPER_GITHUB_TOKEN`. That would not only solve > the "read-only token" problem but also the "don't run everywhere, please!" > problem. You (and other l10n maintainers) only have to create a Personal > Access Token with `repo` permission and add it as a secret. > > But ideally, you would test whether an environment of a given name exists, > and I am not aware if such a thing is possible yet with GitHub workflows. > > Food for thought?
To make it simple, I want to limit the permissions of the token in "l10n.yml' and use the default `GITHUB_TOKEN`. like this:
git-po-helper:
needs: l10n-config
if: needs.l10n-config.outputs.enabled == 'yes'
runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write
steps:It can work even if the administrator turns off 'read-write-permission' for action of the repository.
-- Regards, Jiang Xin