From 698d7dc426cc3b8909110b416b3279e535fa37cd Mon Sep 17 00:00:00 2001 From: Aidan Casey Date: Wed, 16 Apr 2025 12:45:32 -0400 Subject: [PATCH 1/2] Fix GitHub rate limit. --- .github/workflows/deploy.yml | 32 +++++++++++++++++++++++++++++-- src/GitHub/GetLatestRelease.php | 13 +++---------- src/GitHub/GetStargazersCount.php | 15 +++++---------- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 13954b41..04ea1184 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -34,10 +34,38 @@ jobs: - name: List Installed Dependencies run: composer show -D - - name: Deploy - run: php ./tempest deploy + - name: Get latest GitHub Statistics + id: stats env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -e + + # Get stargazers + STARS=$(curl -s -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/repos/tempestphp/tempest-framework | jq '.stargazers_count // empty') + STARS_K="" + if [ -n "$STARS" ]; then + if [ "$STARS" -gt 999 ]; then + STARS_K=$(awk "BEGIN { printf \"%.1fK\", $STARS/1000 }") + else + STARS_K=$STARS + fi + fi + + # Get latest release tag + TAG=$(curl -s -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/repos/tempestphp/tempest-framework/releases/latest | jq -r '.tag_name // empty') + + echo "Stars: $STARS_K" + echo "Latest Version: $TAG" + + # Push these values to the output + echo "stars=$STARS_K" >> "$GITHUB_OUTPUT" + echo "latest_tag=$TAG" >> "$GITHUB_OUTPUT" + - name: Deploy + run: php ./tempest deploy + env: + TEMPEST_BUILD_STARGAZERS: ${{ steps.stats.outputs.stars }} + TEMPEST_BUILD_LATEST_RELEASE: ${{ steps.stats.outputs.latest_tag }} diff --git a/src/GitHub/GetLatestRelease.php b/src/GitHub/GetLatestRelease.php index c21129f9..8ba59d17 100644 --- a/src/GitHub/GetLatestRelease.php +++ b/src/GitHub/GetLatestRelease.php @@ -17,12 +17,8 @@ public function __construct( public function __invoke(): ?string { - // Added by Aidan Casey to combat the GitHub rate limits. - // We will inject the GH_TOKEN using our workflow. - $headers = []; - - if ($githubToken = env('GH_TOKEN')) { - $headers['Authorization'] = 'Bearer ' . $githubToken; + if ($latestRelease = env('TEMPEST_BUILD_LATEST_RELEASE')) { + return $latestRelease; } // Default release to the currently running version of Tempest. @@ -30,10 +26,7 @@ public function __invoke(): ?string try { $body = $this->httpClient - ->get( - uri: 'https://api.github.com/repos/tempestphp/tempest-framework/releases/latest', - headers: $headers, - ) + ->get('https://api.github.com/repos/tempestphp/tempest-framework/releases/latest') ->body; return json_decode($body)->tag_name ?? $defaultRelease; diff --git a/src/GitHub/GetStargazersCount.php b/src/GitHub/GetStargazersCount.php index 301b406e..204aa0fc 100644 --- a/src/GitHub/GetStargazersCount.php +++ b/src/GitHub/GetStargazersCount.php @@ -16,19 +16,14 @@ public function __construct( public function __invoke(): ?string { - // Added by Aidan Casey to combat the GitHub rate limits. - // We will inject the GH_TOKEN using our workflow. - $headers = []; - - if ($githubToken = env('GH_TOKEN')) { - $headers['Authorization'] = 'Bearer ' . $githubToken; + if ($stargazers = env('TEMPEST_BUILD_STARGAZERS')) { + return $stargazers; } try { - $body = $this->httpClient->get( - uri: 'https://api.github.com/repos/tempestphp/tempest-framework', - headers: $headers, - )->body; + $body = $this->httpClient + ->get(uri: 'https://api.github.com/repos/tempestphp/tempest-framework') + ->body; $stargazers = json_decode($body)->stargazers_count ?? null; return $stargazers > 999 From f4d356f49b2647d89ed802a394983685d8f703d2 Mon Sep 17 00:00:00 2001 From: Enzo Innocenzi Date: Thu, 22 May 2025 12:12:00 +0200 Subject: [PATCH 2/2] refactor: clean up --- .github/workflows/deploy.yml | 25 ++++--------------------- src/GitHub/GetLatestRelease.php | 5 ++--- src/GitHub/GetStargazersCount.php | 20 ++++++++++++++------ 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 04ea1184..dfd303ad 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -34,32 +34,17 @@ jobs: - name: List Installed Dependencies run: composer show -D - - name: Get latest GitHub Statistics + - name: Get latest GitHub statistics id: stats env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -e - - # Get stargazers STARS=$(curl -s -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/repos/tempestphp/tempest-framework | jq '.stargazers_count // empty') - STARS_K="" - if [ -n "$STARS" ]; then - if [ "$STARS" -gt 999 ]; then - STARS_K=$(awk "BEGIN { printf \"%.1fK\", $STARS/1000 }") - else - STARS_K=$STARS - fi - fi - - # Get latest release tag TAG=$(curl -s -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/repos/tempestphp/tempest-framework/releases/latest | jq -r '.tag_name // empty') - - echo "Stars: $STARS_K" - echo "Latest Version: $TAG" - - # Push these values to the output - echo "stars=$STARS_K" >> "$GITHUB_OUTPUT" + echo "Stars: $STARS" + echo "Latest version: $TAG" + echo "stars=$STARS" >> "$GITHUB_OUTPUT" echo "latest_tag=$TAG" >> "$GITHUB_OUTPUT" - name: Deploy @@ -67,5 +52,3 @@ jobs: env: TEMPEST_BUILD_STARGAZERS: ${{ steps.stats.outputs.stars }} TEMPEST_BUILD_LATEST_RELEASE: ${{ steps.stats.outputs.latest_tag }} - - diff --git a/src/GitHub/GetLatestRelease.php b/src/GitHub/GetLatestRelease.php index 8ba59d17..a668deb3 100644 --- a/src/GitHub/GetLatestRelease.php +++ b/src/GitHub/GetLatestRelease.php @@ -30,9 +30,8 @@ public function __invoke(): ?string ->body; return json_decode($body)->tag_name ?? $defaultRelease; - } catch (Throwable $e) { - ll($e); - return Kernel::VERSION; + } catch (Throwable) { + return $defaultRelease; } } } diff --git a/src/GitHub/GetStargazersCount.php b/src/GitHub/GetStargazersCount.php index 204aa0fc..45b87cae 100644 --- a/src/GitHub/GetStargazersCount.php +++ b/src/GitHub/GetStargazersCount.php @@ -2,6 +2,7 @@ namespace App\GitHub; +use PDO; use Tempest\HttpClient\HttpClient; use Throwable; @@ -15,6 +16,17 @@ public function __construct( } public function __invoke(): ?string + { + if ($stargazers = $this->getStargazersCount()) { + return $stargazers > 999 + ? (round($stargazers / 1000, 1) . 'K') + : $stargazers; + } + + return null; + } + + private function getStargazersCount(): ?int { if ($stargazers = env('TEMPEST_BUILD_STARGAZERS')) { return $stargazers; @@ -24,13 +36,9 @@ public function __invoke(): ?string $body = $this->httpClient ->get(uri: 'https://api.github.com/repos/tempestphp/tempest-framework') ->body; - $stargazers = json_decode($body)->stargazers_count ?? null; - return $stargazers > 999 - ? (round($stargazers / 1000, 1) . 'K') - : $stargazers; - } catch (Throwable $e) { - ll($e); + return $stargazers = json_decode($body)->stargazers_count ?? null; + } catch (\Throwable) { return null; } }