on: workflow_dispatch: schedule: - cron: '@hourly' jobs: mirror: name: Pull from upstream runs-on: x86_64 container: image: alpine:latest env: upstream: https://github.com/signalapp/Signal-Desktop tags: 'v7*' steps: - name: Environment setup run: apk add grep git sed coreutils bash nodejs - name: Fetch destination uses: actions/checkout@v4 with: fetch_depth: 1 ref: ci token: ${{ secrets.CODE_FORGEJO_TOKEN }} - name: Missing tag detecting run: | git ls-remote $upstream "refs/tags/$tags" | grep -v '{' | sed 's|.*/||' > upstream_tags git ls-remote ${{ github.server_url}}/${{ github.repository }} "refs/tags/$tags" | grep -v '{' | sed 's|.*/||' > destination_tags cat upstream_tags destination_tags | tr ' ' '\n' | sort | uniq -u > missing_tags echo "Missing tags:" cat missing_tags - name: Missing tag fetch run: | git remote add upstream $upstream while read tag; do git fetch upstream tag $tag --no-tags done < missing_tags - name: Packaging workflow injection run: | while read tag; do git checkout $tag git tag -d $tag git checkout ci -- ./.forgejo git config user.name "forgejo-actions[bot]" git config user.email "dev@ayakael.net" git commit -m 'Inject custom workflow' git tag -a $tag -m $tag done < missing_tags - name: Push to destination run: | # use http 1.1 due to http 2 stream not closing cleanly git config --global http.version HTTP/1.1 git push --force origin refs/tags/*:refs/tags/* --tags