| name: Automerge | |
| concurrency: | |
| group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| on: | |
| push: | |
| pull_request: | |
| jobs: | |
| Pipeline: | |
| if: ${{ !(github.event_name != 'pull_request' && github.actor == 'dependabot[bot]') }} | |
| uses: ./.github/workflows/Tests.yml | |
| GCS: | |
| if: ${{ !(github.event_name != 'pull_request' && github.actor == 'dependabot[bot]') }} | |
| needs: Pipeline | |
| container: ubuntu:bionic | |
| runs-on: | |
| - self-hosted | |
| - Linux | |
| - X64 | |
| env: | |
| MAX_CORES: 80 | |
| GHA_EXTERNAL_DISK: "tools" | |
| GHA_SA: "gh-sa-f4pga-arch-defs-ci" | |
| steps: | |
| - name: '📤 Download artifact: arch-defs packages' | |
| uses: actions/download-artifact@v3 | |
| with: | |
| name: packages | |
| path: './' | |
| - name: 🕐 Timestamp, Hash and packages.list | |
| id: timestamp | |
| run: | | |
| TIMESTAMP="$(date +'%Y%m%d-%H%M%S')" | |
| echo '::set-output name=timestamp::'"$TIMESTAMP" | |
| echo 'Timestamp: '"$TIMESTAMP" >> $GITHUB_STEP_SUMMARY | |
| echo 'Hash: '"$(echo symbiflow-arch-defs*.tar.xz | sed 's/.*-\(.*\)\.tar\.xz/\1/')" >> $GITHUB_STEP_SUMMARY | |
| ls *.tar.xz > packages.list | |
| mkdir -p install | |
| - name: '🛠️ Setup Python and gsutil' | |
| run: | | |
| apt update -qqy | |
| apt install -qqy curl python3 gnupg2 | |
| echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list | |
| curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - | |
| apt update -qqy | |
| apt install -qqy google-cloud-cli | |
| - name: 🚀 Upload to Google Cloud Storage (GCS) bucket | |
| run: | | |
| python3 - <<EOF | |
| from subprocess import check_call, run | |
| from pathlib import Path | |
| from re import compile as re_compile | |
| TIMESTAMP = '${{ steps.timestamp.outputs.timestamp }}' | |
| DO_UPLOAD = '${{ github.event_name == 'push' && github.ref_name == 'main' }}' == 'true' | |
| print(f'> TIMESTAMP: {TIMESTAMP}') | |
| PACKAGE_RE = re_compile("symbiflow-arch-defs-([a-zA-Z0-9_-]+)-([a-z0-9])") | |
| def write_latest(package_name, timestamp, artifact): | |
| with (Path("install") / f"symbiflow-{package_name}-latest").open("w") as wptr: | |
| wptr.write( | |
| 'https://storage.googleapis.com/symbiflow-arch-defs/artifacts/prod/foss-fpga-tools/' | |
| f'symbiflow-arch-defs/continuous/install/{TIMESTAMP}/{artifact}' | |
| ) | |
| with (Path(__file__).parent.parent.parent / 'packages.list').open('r') as rptr: | |
| for artifact in rptr.read().splitlines(): | |
| if DO_UPLOAD: | |
| check_call([ | |
| 'gsutil', 'cp', str(artifact), | |
| f'gs://symbiflow-arch-defs/artifacts/prod/foss-fpga-tools/symbiflow-arch-defs/continuous/install/{TIMESTAMP}/' | |
| ]) | |
| m = PACKAGE_RE.match(artifact) | |
| assert m, f"Package name not recognized! {artifact}" | |
| package_name = m.group(1) | |
| write_latest(package_name, TIMESTAMP, artifact) | |
| if package_name == 'install-xc7': | |
| write_latest('toolchain', TIMESTAMP, artifact) | |
| if package_name == 'benchmarks-xc7': | |
| write_latest('benchmarks', TIMESTAMP, artifact) | |
| if DO_UPLOAD: | |
| run('gsutil -m rsync $* -r install gs://${{ secrets.GCP_STORAGE_BUCKET }}/', shell=True, check=False) | |
| EOF | |
| - name: '📤 Upload artifact: latest' | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: latest | |
| path: install | |
| Assets: | |
| if: ${{ !(github.event_name != 'pull_request' && github.actor == 'dependabot[bot]') && (github.event_name == 'push' && github.ref_name == 'main')}} | |
| needs: GCS | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: '📤 Download artifact: latest' | |
| uses: actions/download-artifact@v3 | |
| with: | |
| name: latest | |
| path: install | |
| - uses: pyTooling/Actions/releaser@r0 | |
| with: | |
| token: ${{ github.token }} | |
| tag: latest | |
| files: install/* | |
| Automerge: | |
| needs: Pipeline | |
| if: github.event_name == 'pull_request' && github.actor == 'dependabot[bot]' | |
| runs-on: ubuntu-latest | |
| name: Automerge dependabot PRs | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Auto-merge Dependabot PR | |
| run: GITHUB_TOKEN='${{ github.token }}' gh pr merge '${{ github.event.pull_request.html_url }}' --squash |