name: Update cache from SVN on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: #schedule: #- cron: '59 */3 * * *' # every third hour to keep cache up to date jobs: # This workflow contains a single job called "build" mirror: # The type of runner that the job will run on runs-on: ubuntu-latest continue-on-error: true steps: - name: install git-svn package run: | sudo apt-get remove git git-man sudo apt-get update sudo apt-get install git-svn --no-install-recommends - name: checkout authors uses: actions/checkout@v3.5.2 with: ref: travis path: ./authors - name: Get current date id: get-date run: | echo "::set-output name=timestamp::$(/bin/date -u "+%Y%m%d%H" )" shell: bash - name: Cache runners svn-2-git-fhem mirror directory # Some room for improvement because we create a new cache on every run where a new ref is fetched, this isn't very nice, normaly we need only the last one and it takes 7 days until they are deleted id: cache-fhem uses: actions/cache@v3.3.1 with: path: | ./src/fhem-mirror/.git key: ${{ runner.os }}-fhemsvndir-${{ steps.get-date.outputs.timestamp }} restore-keys: | ${{ runner.os }}-fhemsvndir- #- name: remove gitconfig # run: | # rm ./src/fhem-mirror/.git/config - name: checkout main branch uses: actions/checkout@v3.5.2 with: path: ./src/fhem-mirror clean: false - name: generate merged authors file run: | cd /tmp svn log https://svn.fhem.de/fhem --xml --quiet | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = $1 <>/' > ${GITHUB_WORKSPACE}/authors/authors_svn.txt; cat ${GITHUB_WORKSPACE}/authors/authors.txt ${GITHUB_WORKSPACE}/authors/authors_svn.txt | sort -u -k1,1 > ${GITHUB_WORKSPACE}/authors/authors_merged.txt; ls -la ${GITHUB_WORKSPACE}/authors/authors_merged.txt; - name: fetch from svn id: fetchsvn timeout-minutes: 120 working-directory: ./src/fhem-mirror run: | echo "::group::git svn init" git svn init --trunk=trunk --tags=tags --prefix=svn/ https://svn.fhem.de/fhem; git config --replace-all svn.authorsfile "${GITHUB_WORKSPACE}/authors/authors_merged.txt" git config --replace-all svn-remote.svn.preserve-empty-dirs "true" ; git config --replace-all svn-remote.svn.placeholder-filename ".gitkeep" ; echo "Current .git/config file content:"; cat ${GITHUB_WORKSPACE}/src/fhem-mirror/.git/config; echo "::endgroup::" echo "::set-output name=SVN_FETCH_STATUS::incomplete" # Run fetches after init, go pick up some base refs for the cache on first run only! RET=124 c=1 while [ $RET -eq 124 ]; do echo "::group::Fetch ${c}/5" timeout 1200 git svn --log-window-size=200 -q fetch && RET=$? || true if [ "$RET" -ne 0 ] && [ "$RET" -ne 124 ]; then echo "::set-output name=SVN_FETCH_STATUS::error" fi ((c++)) && ((c==6)) && break echo "::endgroup::" done if [ "$RET" -eq 0 ]; then echo "::set-output name=SVN_FETCH_STATUS::complete" fi # - name: Copy Workflow Files to target # if: ${{ steps.fetchsvn.outputs.SVN_FETCH_STATUS == 'complete' }} # run: | # cp -R ${GITHUB_WORKSPACE}/main/.github ./src/fhem-mirror - name: Verify no fetch error state if: ${{ steps.fetchsvn.outputs.SVN_FETCH_STATUS == 'error' }} run: | echo "A permanent error occured" exit 1