| 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@v4 |
| 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@v4 |
| 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 |