From 5e4c42dc8aea6846298cf34d1e2b49f834c7370e Mon Sep 17 00:00:00 2001 From: Aetherinox Date: Tue, 8 Oct 2024 07:56:41 -0700 Subject: [PATCH] ci: integrate cloudflare api call to graphql --- .github/workflows/worker-publish.yml | 603 +++------------------------ 1 file changed, 53 insertions(+), 550 deletions(-) diff --git a/.github/workflows/worker-publish.yml b/.github/workflows/worker-publish.yml index 5951e13..e05f3c4 100644 --- a/.github/workflows/worker-publish.yml +++ b/.github/workflows/worker-publish.yml @@ -1,6 +1,8 @@ # # # @parent : github workflow # @desc : publish release to github +# version of release fetched from /src/package.json. +# ensure `cloudflare/wrangler-action@v3` worker uses env variable "production" # @author : Aetherinox # @url : https://github.com/Aetherinox # # @@ -24,7 +26,7 @@ on: PLUGIN_NAME: description: "📦 Name of App" required: true - default: 'searxico-cf-worker' + default: 'searxico' type: string # --------------------------------------------------------------------------------------- @@ -79,7 +81,7 @@ on: # # env: - PLUGIN_NAME: searxico-cf-worker + PLUGIN_NAME: ${{ github.event.inputs.PLUGIN_NAME || 'searxico' }} CHANGELOG_MODE_COMMIT: true SHOW_UNCATEGORIZED: false PRERELEASE: false @@ -97,514 +99,6 @@ env: jobs: - # # - # JOB > INITIALIZE - # # - - job-initialize: - name: >- - 📦 Initialize - runs-on: ubuntu-latest - outputs: - package_version: ${{ steps.task_initialize_package_version.outputs.PACKAGE_VERSION }} - permissions: - contents: write - packages: write - environment: - name: Orion - steps: - - # # - # Job > Initialize > Start - # # - - - name: "✅ Start" - id: task_initialize_start - run: | - echo "Starting build" - - # # - # Job > Initialize > Checkout - # # - - - name: "☑️ Checkout" - id: task_initialize_checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - # # - # Package Version > Set - # Get version from package.json VERSION value - # # - - - name: "👁️‍🗨️ Package Version › Get" - id: task_initialize_package_version - run: | - VER=$(cat src/package.json | jq -r '.version') - echo "PACKAGE_VERSION=$VER" >> $GITHUB_OUTPUT - - # # - # Package Version > Print (Debug) - # # - - - name: "👁️‍🗨️ Package Version › Print" - id: task_initialize_package_version_debug - run: | - echo "VERSION: ${{ steps.task_initialize_package_version.outputs.PACKAGE_VERSION }}" - - # # - # Job > Release > Cloudflare - # # - - job-cloudflare: - name: >- - ☁️ Cloudflare Worker - needs: job-initialize - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - environment: - name: Orion - steps: - - # # - # Cloudflare > Checkout - # # - - - name: "☑️ Checkout" - id: task_cloudflare_checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - # --------------------------------------------------------------------------------------- - # CLOUDFLARE > NODE > SETUP - # --------------------------------------------------------------------------------------- - - - name: "⚙️ Setup › Node" - id: task_cloudflare_node_setup - uses: actions/setup-node@v4 - with: - node-version: '20.x' - registry-url: https://npm.pkg.github.com/ - scope: '@aetherinox' - - # --------------------------------------------------------------------------------------- - # CLOUDFLARE > NODE > INSTALL - # --------------------------------------------------------------------------------------- - - - name: "📦 NPM › Install" - id: task_cloudflare_npm_install - run: | - npm install - env: - NODE_AUTH_TOKEN: ${{ secrets.SELF_TOKEN_CL }} - - # --------------------------------------------------------------------------------------- - # Dist Releases > Run pretty and lint - # --------------------------------------------------------------------------------------- - - - name: "🪪 NPM › Pretty" - id: task_cloudflare_npm_prettylint - run: | - npm run pretty - - # --------------------------------------------------------------------------------------- - # Dist Releases > Print Version Debug - # --------------------------------------------------------------------------------------- - - - name: "☁️ Cloudflare › Version" - id: task_cloudflare_version - run: | - echo "VERSION: ${{ env.PACKAGE_VERSION }}" - - # --------------------------------------------------------------------------------------- - # CLOUDFLARE > SETUP - # --------------------------------------------------------------------------------------- - - - name: "☁️ Cloudflare" - id: task_cloudflare_deploy - uses: cloudflare/wrangler-action@v3 - with: - apiToken: ${{ secrets.CF_TOKEN }} - accountId: ${{ secrets.CF_ACCOUNT_ID }} - workingDirectory: "src" - environment: 'production' - command: deploy --minify - - # # - # Job > Release > Github - # # - - job-release: - name: >- - 📦 Publish › Release - runs-on: ubuntu-latest - needs: [ job-initialize, job-cloudflare ] - env: - PACKAGE_VERSION: ${{ needs.job-initialize.outputs.package_version }} - permissions: - contents: write - packages: write - environment: - name: Orion - steps: - - # # - # Dist Releases > Checkout - # # - - - name: "☑️ Checkout" - id: task_release_checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - # # - # Dist Releases > Print Version Debug - # # - - - name: "🪪 Test Next Job Version" - id: task_release_debug_print_ver - run: | - echo "VERSION: ${{ env.PACKAGE_VERSION }}" - - # # - # Dist Releases > Install package via NPM - # # - - - name: "🪪 Install Dependencies" - id: task_release_npm_install - run: | - npm install - - # # - # Dist Releases > Print / Lint - # # - - - name: "🪪 NPM › Pretty" - id: task_release_npm_prettylint - run: | - npm run pretty - - # # - # Dist Releases > Execute npm generate so that a uuid and guid can be created - # # - - - name: "🪪 Generate IDs" - id: task_release_npm_env_generate - run: | - npm run root:generate - - # # - # .ENV > Get - # Get guid and uuid from env variable generated by npm - # # - - - name: "🪪 .ENV › Get" - id: task_release_dotenv_get - uses: falti/dotenv-action@v1 - - # # - # .ENV > Print (Debug) - # Show guid and uuid from env variable generated by npm - # # - - - name: "🪪 .ENV › Read" - id: task_dotenv_debug_print - run: | - echo "GUID: ${{ steps.task_release_dotenv_get.outputs.GUID }}" - echo "UUID: ${{ steps.task_release_dotenv_get.outputs.UUID }}" - - # # - # Build Project & Create Zip - # # - - - name: "🔨 Build › Stable ( ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip )" - id: task_release_build_st - if: ${{ startsWith( inputs.PRERELEASE, false ) }} - run: | - echo Building STABLE Package .zip ${{ env.PACKAGE_VERSION }} - zip -r ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip package.json wrangler.toml .prettierrc README.md LICENSE src -x src/tests/**\* - ls - env: - NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} - - - name: "🔨 Build › RC ( ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip )" - id: task_release_build_rc - if: ${{ startsWith( inputs.PRERELEASE, true ) }} - run: | - echo Building PRE-RELEASE Package .zip ${{ env.PACKAGE_VERSION }} - zip -r ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip package.json wrangler.toml .prettierrc README.md LICENSE src -x src/tests/**\* - ls - env: - NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} - - # # - # [ Tag ]: Pre Create - # - # in order to use the changelog github action, you must pre-create the tag otherwise - # the changelog action will have no idea what tag you are going to be creating and - # the list of commits will not be for the correct release. - # # - - - name: "🔖 Tag › Pre Create ${{ env.PACKAGE_VERSION }}" - id: task_release_tag_create - uses: rickstaa/action-create-tag@v1 - with: - tag: ${{ env.PACKAGE_VERSION }} - tag_exists_error: false - message: "Latest release" - gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }} - gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }} - - # # - # [ Tag ]: Confirm - # - # check if tag already exists - # # - - - name: "🔖 Tag › Confirm ${{ env.PACKAGE_VERSION }}" - id: task_release_tag_get - run: | - echo "Tag already present: ${{ env.TAG_EXISTS }}" - echo "Tag already present: ${{ steps.task_release_tag_create.outputs.tag_exists }}" - - # # - # Checksum > Generate - # # - - - name: "🆔 Checksum › Stable" - id: task_release_checksum_st_set - if: ${{ startsWith( inputs.PRERELEASE, false ) }} - run: | - filename_zip="${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip" - sha256="$(shasum --algorithm 256 ${filename_zip} | awk '{ print $1 }')" - shasum --algorithm 256 ${filename_zip} > SHA256SUMS.txt - echo "FILE_ZIP=${filename_zip}" >> $GITHUB_ENV - echo "SHA256SUM=${sha256}" >> $GITHUB_ENV - - - name: "🆔 Checksum › RC" - id: task_release_checksum_rc_set - if: ${{ startsWith( inputs.PRERELEASE, true ) }} - run: | - filename_zip="${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip" - sha256="$(shasum --algorithm 256 ${filename_zip} | awk '{ print $1 }')" - shasum --algorithm 256 ${filename_zip} > SHA256SUMS.txt - echo "FILE_ZIP=${filename_zip}" >> $GITHUB_ENV - echo "SHA256SUM=${sha256}" >> $GITHUB_ENV - - # # - # Checksum > Print - # # - - - name: "🆔 Checksum › Print" - id: task_release_checksum_st_get - run: | - echo ${{ env.SHA256SUM }} - - # # - # Contributor Images - # # - - - name: "🥸 Contributors › Generate" - id: task_release_contribs_generate - uses: jaywcjlove/github-action-contributors@main - with: - filter-author: (renovate\[bot\]|renovate-bot|dependabot\[bot\]) - output: CONTRIBUTORS.svg - avatarSize: 42 - - # # - # Checksum > Add to ZIP file - # # - - - name: "📦 Zip › Add Checksum › Stable" - id: task_release_zip_st - if: ${{ startsWith( inputs.PRERELEASE, false ) }} - run: | - echo Zipping STABLE Package .zip ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip - zip -jr ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip SHA256SUMS.txt - ls - - - name: "📦 Zip › Add Checksum › RC" - id: task_release_zip_rc - if: ${{ startsWith( inputs.PRERELEASE, true ) }} - run: | - echo Zipping PRE-RELEASE Package .zip ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip - zip -jr ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip SHA256SUMS.txt - ls - - # # - # Changelog > Generate - # - # generates a changelog from the github api. requires a PREVIOUS_TAG in order to figure - # out the changes made between the two versions. - # - # outputs: - # ${{ steps.changelog.outputs.changelog }} - # # - - - name: "📝 Changelog › Pre Setup (Categorized Commits)" - id: task_release_changelog_categorized_sha_set - run: | - echo "TAG_LAST=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - echo "COMMIT_LAST=$(git rev-parse HEAD)" >> $GITHUB_ENV - - - name: "📝 Changelog › Build (Categorized)" - id: task_release_changelog_categorized - if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, false ) }} - uses: mikepenz/release-changelog-builder-action@v5 - with: - token: ${{ secrets.ADMINSERV_TOKEN }} - #fromTag: "${{ env.TAG_LAST }}" - #toTag: "${{ github.ref }}" - configuration: ".github/changelog-configuration.json" - ignorePreReleases: false - commitMode: ${{ inputs.CHANGELOG_MODE_COMMIT }} - fetchReleaseInformation: true - fetchViaCommits: true - configurationJson: | - { - "template": "## Release Info \n| Item | Value |\n| --- | --- |\n|📄 ${{ env.FILE_ZIP }}|Contains the latest version of the favicon cloudflare worker|\n|🏷️ SHA256|`${{ env.SHA256SUM }}`|\n|🏷️ GUID|`${{ steps.task_release_dotenv_get.outputs.GUID }}`|\n|🏷️ GUID|`${{ steps.task_release_dotenv_get.outputs.GUID }}`|\n|🕟 Stamp|`#{{FROM_TAG}}-#{{FROM_TAG_DATE}} 🔺 #{{TO_TAG}}-#{{TO_TAG_DATE}}`|\n|📅 Last Release|`#{{DAYS_SINCE}} days ago`|\n\n
\n\n---\n\n
\n\n### What's New\nThis release contains the following changes:\n\n
\n\n---\n\n
\n\n### Statistics\nHow the files have changed:\n\n\n
\n\n---\n\n
\n\n### Pull Requests\nThis release is associated with the following pull requests:\n#{{CHANGELOG}}\n\n
\n\n---\n\n
\n\n" - } - env: - GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }} - - # # - # shows only categorized commits using the commit standards - # type(scope): description - # type: description - # # - - - name: "📝 Changelog › Build (Uncategorized)" - id: task_release_changelog_uncategorized - if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, true ) }} - uses: mikepenz/release-changelog-builder-action@v5 - with: - token: ${{ secrets.ADMINSERV_TOKEN }} - #fromTag: "${{ env.TAG_LAST }}" - #toTag: "${{ github.ref }}" - configuration: ".github/changelog-configuration.json" - ignorePreReleases: false - commitMode: ${{ inputs.CHANGELOG_MODE_COMMIT }} - fetchReleaseInformation: true - fetchViaCommits: true - configurationJson: | - { - "template": "## Release Info \n| Item | Value |\n| --- | --- |\n|📄 ${{ env.FILE_ZIP }}|Contains the latest version of the favicon cloudflare worker|\n|🏷️ SHA256|`${{ env.SHA256SUM }}`|\n|🏷️ GUID|`${{ steps.task_release_dotenv_get.outputs.GUID }}`|\n|🏷️ GUID|`${{ steps.task_release_dotenv_get.outputs.GUID }}`|\n|🕟 Stamp|`#{{FROM_TAG}}-#{{FROM_TAG_DATE}} 🔺 #{{TO_TAG}}-#{{TO_TAG_DATE}}`|\n|📅 Last Release|`#{{DAYS_SINCE}} days ago`|\n\n
\n\n---\n\n
\n\n### What's New\nThis release contains the following changes:\n\n
\n\n---\n\n
\n\n### Statistics\nHow the files have changed:\n\n\n
\n\n---\n\n
\n\n### Commits (#{{UNCATEGORIZED_COUNT}})\nThe following commits are uncategorized:\n#{{UNCATEGORIZED}}\n\n
\n\n---\n\n
\n\n### Pull Requests\nThis release is associated with the following pull requests:\n#{{CHANGELOG}}\n\n
\n\n" - } - env: - GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }} - - # # - # Changelog > Fetch - # # - - - name: "📝 Changelog › Print (Categorized)" - if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, false ) }} - run: | - echo "${{ steps.task_release_changelog_categorized.outputs.changelog }}" - - - name: "📝 Changelog › Print (Uncategorized)" - if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, true ) }} - run: | - echo "${{ steps.task_release_changelog_uncategorized.outputs.changelog }}" - - # # - # [ Release ]: Post Release - # - # outputs: - # [RELEASE ID]: - # ${{ steps.task_release_bundle_rc.outputs.id - # ${{ steps.task_release_bundle_st.outputs.id - # # - - - name: "🏳️ Post › Stable" - if: ${{ startsWith( inputs.PRERELEASE, false ) }} - uses: softprops/action-gh-release@v2 - id: task_release_bundle_st - env: - GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} - with: - token: ${{ secrets.ADMINSERV_TOKEN_CL }} - name: v${{ env.PACKAGE_VERSION }} - tag_name: ${{ env.PACKAGE_VERSION }} - target_commitish: ${{ github.event.inputs.branch }} - draft: false - generate_release_notes: false - files: | - ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip - SHA256SUMS.txt - prerelease: false - body: | - ${{ steps.task_release_changelog_categorized.outputs.changelog }} - ${{ steps.task_release_changelog_uncategorized.outputs.changelog }} - - - name: "🏳️ Post › Release Candidate" - if: ${{ startsWith( inputs.PRERELEASE, true ) }} - uses: softprops/action-gh-release@v2 - id: task_release_bundle_rc - env: - GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }} - with: - token: ${{ secrets.ADMINSERV_TOKEN }} - name: v${{ env.PACKAGE_VERSION }} - tag_name: ${{ env.PACKAGE_VERSION }} - target_commitish: ${{ github.event.inputs.branch }} - draft: false - generate_release_notes: false - files: | - ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip - SHA256SUMS.txt - prerelease: false - body: | - > [!WARNING] - > This is a **release candidate**, which means it is not a stable release and could contain bugs. You should download it at your own risk. - - ${{ steps.task_release_changelog_categorized.outputs.changelog }} - ${{ steps.task_release_changelog_uncategorized.outputs.changelog }} - - # # - # Print Status - # # - - - name: "🎛️ Status › Print" - id: task_release_status_print - run: | - echo "Printing Variables" - echo - echo "---- CHANGELOG ---------------------------------------------------------------" - echo "${{ steps.task_release_changelog_categorized.outputs.changelog }}" - echo "${{ steps.task_changelog_uncategorized.outputs.changelog }}" - echo "---- CHANGELOG ---------------------------------------------------------------" - echo "" - echo "" - echo "---- VARIABLES ---------------------------------------------------------------" - echo "Package Version ............ ${{ env.PACKAGE_VERSION }}" - echo "Tag: Previous .............. ${{ env.TAG_LAST }}" - echo "Tag: Now.... ............... ${{ github.ref }}" - echo "Last Commit ................ ${{ env.COMMIT_LAST }}" - echo "ST Output ID ............... ${{ steps.task_release_bundle_st.outputs.id }}" - echo "RC Output ID ............... ${{ steps.task_release_bundle_rc.outputs.id }}" - echo "---- CHANGELOG ---------------------------------------------------------------" - - # # - # Upload artifacts > .deb packages - # # - - - name: >- - 📋 Upload Artifacts › ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip - id: task_release_artifact - uses: actions/upload-artifact@v4 - if: always() - with: - name: "release" - path: ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip - retention-days: 30 - # # # JOB > COMPLETE # # @@ -613,10 +107,6 @@ jobs: name: >- 🆗 Successful Deployment needs: [job-initialize, job-release] - env: - PACKAGE_VERSION: ${{ needs.job-initialize.outputs.package_version }} - GUID: ${{ needs.job-release.outputs.guid }} - UUID: ${{ needs.job-release.outputs.uuid }} runs-on: ubuntu-latest environment: name: Orion @@ -630,39 +120,52 @@ jobs: uses: actions/download-artifact@v4 # # - # Job > Complete > Get publish timestamp - # # - - - name: "🕛 Get Timestamp" - id: task_complete_timestamp_get - run: | - echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV - tree - - # # - # Job > Complete > Set ENVs - # # - - - name: "🕛 Get Env Vars" - id: task_complete_set_envs - run: | - release_stable_file="release/${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip" - release_stable_sha256="$(shasum --algorithm 256 ${release_stable_file} | awk '{ print $1 }')" - - echo "FILE_STABLE=${release_stable_file}" >> $GITHUB_ENV - echo "SHA_STABLE=${release_stable_sha256}" >> $GITHUB_ENV - - # # - # Job > Complete > Summary of publish - # # - - - name: "🆗 Completed: ${{ env.NOW }}" - id: task_complete_summary - run: | - echo "" - echo "" - echo "| File | Result |" >> $GITHUB_STEP_SUMMARY - echo "| ------------------------------- | ----------------------- |" >> $GITHUB_STEP_SUMMARY - echo "| **${{ env.FILE_STABLE }}** | ${{ env.SHA_STABLE }} |" >> $GITHUB_STEP_SUMMARY - echo "| **GUID** | ${{ env.GUID }} |" >> $GITHUB_STEP_SUMMARY - echo "| **UUID** | ${{ env.UUID }} |" >> $GITHUB_STEP_SUMMARY + # CLOUDFLARE > CHECK PROJECT + # + # this step checks to see if your project already exists on cloudflare + # today date --utc +%FT%TZ + # yesterday date --utc -d '-1 day' '+%FT%TZ' + # # + + - name: "☁️ CF › Check Project" + id: task_cloudflare_project_check + shell: bash + run: | + yesturday=$(date --utc -d '-1 day' '+%FT%TZ') + now=$(date --utc +%FT%TZ) + + env=$(curl -s -X GET "https://api.cloudflare.com/client/v4/accounts/${{ secrets.CF_ACCOUNT_ID }}/workers/scripts/searxico/settings/" \ + -H "Authorization: Bearer ${{ secrets.CF_TOKEN }}" \ + -H "Content-Type:application/json" | jq -r '.result.bindings[0].text') + echo "ENV_VAR=$env" >> $GITHUB_OUTPUT + + echo '{ "query": + "query GetWorkersAnalytics($accountTag: string, $datetimeStart: string, $scriptName: string) { + viewer { + accounts(filter: {accountTag: $accountTag}) { + workersInvocationsAdaptive(limit: 1000, filter: { + scriptName: $scriptName, + datetime_geq: $datetimeStart, + datetime_leq: $datetimeEnd + }) { + sum { + subrequests + requests + errors + } + } + } + } + }", + "variables": { + "accountTag": "${{ secrets.CF_ACCOUNT_ID }}", + "datetimeStart": "${yesturday}", + "datetimeEnd": "${now}", + "scriptName": "searxico" + } + }' | tr -d '\n' | curl --silent \ + https://api.cloudflare.com/client/v4/graphql \ + --header "Authorization: Bearer ${{ secrets.CF_TOKEN }}" \ + --header "Accept: application/json" \ + --header "Content-Type: application/json" \ + --data @- | jq -r .data.viewer.accounts[0].workersInvocationsAdaptive