derberg/manage-files-in-multiple-repositories

no changes detected

ReenigneArcher opened this issue · 7 comments

Describe the bug

A clear and concise description of what the bug is.

When running the workflow I get a message "no changes detected".

How to Reproduce

Steps to reproduce the issue. Attach all resources that can help us understand the issue:

name: Global replicator

on:
  push:
    branches: [master]
    paths:
      - ".github/**"
      - "dependabot/**"
      - "gitignore/**"
  workflow_dispatch:
    inputs:
      repo_name:
        description: |
          You can specify the repository's name where workflows should be pushed manually, as long as workflow settings do not ignore the repository.
          If you do not specify the exact repository name, the workflow will try to replicate all missing changes to all repositories.
        required: false

jobs:
  replicate:
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false  # false to run all, true to fail entire job if any fail
      matrix:
        include:
        - job_name: 'workflows'
          patterns_to_ignore: ''
          patterns_to_include: '.github/label-actions.yml,.github/workflows/automerge.yml,.github/workflows/issues.yml,.github/workflows/issues-stale.yml,.github/workflows/pull-requests.yml'
          commit_message: 'ci: update global workflows'
          repos_to_ignore: ''
          topics_to_include: ''
          exclude_private: false
          exclude_forked: true
          branches: 'nightly'
          destination: ''
        - job_name: 'dependabot for github-actions'
          patterns_to_ignore: ''
          patterns_to_include: 'dependabot/github-actions/dependabot.yml'
          commit_message: 'ci: update dependabot'
          repos_to_ignore: ''
          topics_to_include: 'replicator-dependabot-basic'
          exclude_private: false
          exclude_forked: true
          branches: 'nightly'
          destination: '.github'
        - job_name: 'dependabot for python'
          patterns_to_ignore: ''
          patterns_to_include: 'dependabot/pip/dependabot.yml'
          commit_message: 'ci: update dependabot'
          repos_to_ignore: ''
          topics_to_include: 'replicator-dependabot-pip'
          exclude_private: false
          exclude_forked: true
          branches: 'nightly'
          destination: '.github'
        - job_name: 'custom issues'
          patterns_to_ignore: ''
          patterns_to_include: '.github/ISSUE_TEMPLATE/config.yml'
          commit_message: 'ci: update issue templates'
          repos_to_ignore: ''
          topics_to_include: 'replicator-custom-issues'
          exclude_private: false
          exclude_forked: true
          branches: 'nightly'
          destination: ''
        - job_name: 'release notifier'
          patterns_to_ignore: ''
          patterns_to_include: '.github/workflows/release_notifier.yml'
          commit_message: 'ci: update release notifier'
          repos_to_ignore: ''
          topics_to_include: 'replicator-release-notifications'
          exclude_private: false
          exclude_forked: true
          branches: 'nightly'
          destination: ''

    name: ${{ matrix.job_name }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Replicating files
        uses: derberg/copy-files-to-other-repositories@v1
        with:
          github_token: ${{ secrets.GH_PAT }}
          committer_username: RetroArcher-bot
          committer_email: something@something.com
          patterns_to_ignore: ${{ matrix.patterns_to_ignore }}
          patterns_to_include: ${{ matrix.patterns_to_include }}
          commit_message: ${{ matrix.commit_message }}
          repos_to_ignore: ${{ matrix.repos_to_ignore }}
          topics_to_include: ${{ matrix.topics_to_include }}
          exclude_private: ${{ matrix.exclude_private }}
          exclude_forked: ${{ matrix.exclude_forked }}
          branches: ${{ matrix.branches }}
          destination: ${{ matrix.destination }}

Expected behavior

A clear and concise description of what you expected to happen.

The workflow should compare the files found by "patterns" to the files in the destination repositories. If they don't match exactly it should create the PR in the destination repository.

Also, another major issue.

I ran this manually, and it pushed changes to branches that it definitely should not do.

image

Thankfully it only modified dependabot PRs which are easy to recreate.

Am I misunderstanding the purpose of this action?

It also never created a PR against nightly which is what I would have expected to happen.

Luckily github prevented this from going too crazy: https://github.com/RetroArcher/.github/runs/7163456889?check_suite_focus=true

Edit: I see that the branches use regex, so I will switch it to ^nightly$ which I believe will only match nightly exactly.

Using ^nightly$ for the branches does indeed solve the problem of pushing to the dependabot branches. Note this was in combination with an automerge workflow as suggested in the readme. I've also added BASE_BRANCHES: nightly to the automerge action to prevent any accidental automatic merges.

But going back to the original issue. I guess the workflow caches the changes? Can you add an option to disable the cache? I would like to run this on a schedule if possible, but it currently does nothing if there is a cache.

Problems with using the cache:

  • If the workflow fails for some reason, the files in the pattern may already be cached. When the workflow is re-run, it won't create the PR. For example, I had the wrong variable for the token. GH_TOKEN, but in my case I forgot I needed to use GH_PAT, but still everything was cached even though the workflow failed.
  • Cannot run workflow on a schedule.
  • The files may be accidentally modified in the destination repository, when this workflow runs again it won't try to sync the file back to the source repository.

@ReenigneArcher thanks a lot for taking time to report such a detailed issue 🙏🏼

I guess the workflow caches the changes

there is no caching done in the action

I would like to run this on a schedule if possible

for now it works on push and workflow_dispatch. I think supporting schedule should not be very complex, as to my knowledge, it would work completely the same way workflow_dispatch is. Please create separate issue so we do not mix to many concerns in the same issue.


regarding the original problem, the link that you shared: https://github.com/RetroArcher/.github/runs/7163398223
it actually points to LizardByte/.github@199d966 and there were really no changes related to workflows other than the global one

the action works in the way that it picks up only files that were modified with a given commit, and not all files -> https://github.com/derberg/copy-files-to-other-repositories/blob/main/lib/utils.js#L23-L29

only in case of workflow_dispatch we take all -> https://github.com/derberg/copy-files-to-other-repositories/blob/main/lib/utils.js#L31-L35

there are basically 2 use cases, you want to replicate all changes in all repos (or just selected one) on demand using workflow_dispatch or you just want to replicate changes that came with a given commit. I hope that makes sense

I misunderstood the manual workflow run. I did not realize if no repo was supplied it would run against all.

Do I understand correctly, that if I run on a schedule it will behave the same as running as workflow dispatch with no repository supplied?

Do I understand correctly, that if I run on a schedule it will behave the same as running as workflow dispatch with no repository supplied?

I answered:

for now it works on push and workflow_dispatch. I think supporting schedule should not be very complex, as to my knowledge, it would work completely the same way workflow_dispatch is. Please create separate issue so we do not mix to many concerns in the same issue.

for now, if you use schedule, you will get error like: 'This GitHub Action works only when triggered by "push" or "workflow_dispatch" webhooks.'

Okay, thanks for the clarification. Originally, I wasn't sure if you were referring to the action or my workflow yaml. Thanks.

Looks like answered and therefore solved.

Closing, lemme know if I'm wrong