Skip to content

Commit

Permalink
Add workflow to upgrade vendored dependencies
Browse files Browse the repository at this point in the history
So we can stay on top of updates to both RE2 and Abseil now they are
vendored with the gem, run a monthly job to check for any new releases
and update `dependencies.yml` accordingly, raising a PR if there are
any.

Closes #107
  • Loading branch information
mudge committed Sep 24, 2023
1 parent 6ba13eb commit 662dbb1
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 6 deletions.
32 changes: 32 additions & 0 deletions .github/workflows/dependencies.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Upgrade vendored dependencies

on:
workflow_dispatch:
schedule:
- cron: '15 3 1 * *'

jobs:
upgrade:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2"
- name: Upgrade all vendored dependencies to their latest versions
run: ./scripts/update-dependencies
- uses: actions/create-github-app-token@v1
id: app-token
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_PRIVATE_KEY }}
- uses: peter-evans/create-pull-request@v5
with:
token: ${{ steps.app-token.outputs.token }}
branch: 'upgrade-vendored-dependencies'
title: 'Upgrade vendored dependencies'
commit-message: 'Upgrade vendored dependencies to latest versions'
labels: dependencies
body: |
- Upgrade RE2
- Upgrade Abseil
10 changes: 4 additions & 6 deletions dependencies.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
---
libre2:
version: "2023-09-01"
sha256: "5bb6875ae1cd1e9fedde98018c346db7260655f86fdb8837e3075103acd3649b"
# sha-256 hash provided in https://github.com/google/re2/releases/download/2023-09-01/re2-2023-09-01.tar.gz

version: '2023-09-01'
sha256: 5bb6875ae1cd1e9fedde98018c346db7260655f86fdb8837e3075103acd3649b
abseil:
version: "20230125.3"
version: '20230125.3'
sha256: 5366d7e7fa7ba0d915014d387b66d0d002c03236448e1ba9ef98122c13b35c36
# sha-256 hash provided in https://github.com/abseil/abseil-cpp/archive/refs/tags/20230125.3.tar.gz
35 changes: 35 additions & 0 deletions scripts/update-dependencies
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/usr/bin/env ruby

require "net/http"
require "digest/sha2"
require "yaml"

re2_response = Net::HTTP.get_response(URI("https://github.com/google/re2/releases/latest"))
exit 1 unless re2_response.is_a?(Net::HTTPRedirection)

re2_release = File.basename(URI(re2_response["Location"]).path)
re2_redirect = Net::HTTP.get_response(URI("https://github.com/google/re2/releases/download/#{re2_release}/re2-#{re2_release}.tar.gz"))
exit 1 unless re2_redirect.is_a?(Net::HTTPRedirection)

re2_archive = Net::HTTP.get_response(URI(re2_redirect["Location"]))
exit 1 unless re2_archive.is_a?(Net::HTTPSuccess)
re2_sha256sum = Digest::SHA2.hexdigest(re2_archive.body)

abseil_response = Net::HTTP.get_response(URI("https://github.com/abseil/abseil-cpp/releases/latest"))
exit 1 unless abseil_response.is_a?(Net::HTTPRedirection)

abseil_tag = File.basename(URI(abseil_response["Location"]).path)
abseil_redirect = Net::HTTP.get_response(URI("https://github.com/abseil/abseil-cpp/archive/refs/tags/#{abseil_tag}.tar.gz"))
exit 1 unless abseil_redirect.is_a?(Net::HTTPRedirection)

abseil_archive = Net::HTTP.get_response(URI(abseil_redirect["Location"]))
exit 1 unless abseil_archive.is_a?(Net::HTTPSuccess)
abseil_sha256sum = Digest::SHA2.hexdigest(abseil_archive.body)

File.write(
File.expand_path("../dependencies.yml", __dir__),
{
"libre2" => { "version" => re2_release, "sha256" => re2_sha256sum },
"abseil" => { "version" => abseil_tag, "sha256" => abseil_sha256sum }
}.to_yaml
)

0 comments on commit 662dbb1

Please sign in to comment.