-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
76 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,14 @@ name: Regenerate TidalApi Code | |
|
||
on: | ||
push: | ||
workflow_dispatch: | ||
inputs: | ||
target_branch: | ||
description: "The branch to PR against" | ||
required: false | ||
default: "main" | ||
env: | ||
API_MODULE_DIR: tidalapi | ||
|
||
permissions: | ||
contents: write | ||
|
@@ -17,71 +25,110 @@ jobs: | |
- name: Get link to released openapi-generator fork .jar | ||
id: get_release | ||
run: | | ||
REPO_OWNER="tidal-music" | ||
REPO_NAME="openapi-generator" | ||
repo_owner="tidal-music" | ||
repo_name="openapi-generator" | ||
# Fetch the latest release information | ||
curl -s -H -v "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | ||
"https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest" > release_info.json | ||
cat release_info.json | ||
"https://api.github.com/repos/$repo_owner/$repo_name/releases/latest" > release_info.json | ||
# Extract the download URL for the desired asset (example: 'my-asset.zip') | ||
ASSET_ID=$(jq -r '.assets[] | select(.name == "openapi-generator-cli.jar") | .id' release_info.json) | ||
ASSET_URL=$(jq -r '.assets[] | select(.name == "openapi-generator-cli.jar") | .browser_download_url' release_info.json) | ||
echo "Asset URL: $ASSET_ID" | ||
# Save asset URL for the next step | ||
echo "::set-output name=asset_id::$ASSET_URL" | ||
echo "::set-output name=asset_url::$ASSET_URL" | ||
- name: Download generator binary | ||
env: | ||
ASSET_URL: ${{ steps.get_release.outputs.asset_url }} | ||
run: | | ||
REPO_OWNER="organization" | ||
REPO_NAME="another-repo" | ||
ASSET_ID=${{ steps.get_release.outputs.asset_id }} | ||
# Download the asset using the GitHub API | ||
echo "Downloading from ${{ env.ASSET_URL }}" | ||
curl -L -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | ||
-H "Accept: application/octet-stream" \ | ||
-o tidalapi/bin/openapi-generator-cli.jar \ | ||
"$ASSET_ID" | ||
"${{ env.ASSET_URL }}" | ||
- name: Run the the TidalAPI code generation | ||
- name: Run the TidalAPI code generation | ||
run: | | ||
cd tidalapi | ||
cd ${{ env.API_MODULE_DIR }} | ||
chmod +x ./bin/openapi-generator-cli.jar | ||
python ./bin/generate-api-files.py ./bin/generate-api-config.json | ||
git status | ||
env: | ||
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64 | ||
|
||
- name: Check for changes | ||
id: check_changes | ||
env: | ||
GENERATED_FOLDER_NAME: "tidalapi/src/main/kotlin/com/tidal/sdk/tidalapi/generated" | ||
run: | | ||
git add ./tidalapi | ||
changes_in_generated=$(git status -s $GENERATED_FOLDER_NAME | sed 's/"//g') | ||
echo "Changes in $GENERATED_FOLDER_NAME:" | ||
echo "$changes_in_generated" | ||
if [ -n "$changes_in_generated" ]; then | ||
changes_detected="true" | ||
# Count the number of changed files (lines in changes_in_generated) | ||
changed_file_count=$(echo "$changes_in_generated" | wc -l) | ||
else | ||
changes_detected="false" | ||
changed_file_count=0 | ||
echo "No new changes found." | ||
fi | ||
{ | ||
echo 'changed_files<<EOF' | ||
echo "$changes_in_generated" | ||
echo 'EOF' | ||
} >> $GITHUB_OUTPUT | ||
echo "changes_detected=$changes_detected" >> $GITHUB_OUTPUT | ||
echo "changed_file_count=$changed_file_count" >> $GITHUB_OUTPUT | ||
- name: Commit changes | ||
id: commit_changes | ||
if: steps.check_changes.outputs.changes_detected == 'true' | ||
run: | | ||
git config user.email "[email protected]" | ||
git config user.name "TIDAL Music Tools" | ||
git checkout -b tidal-music-tools/Update-Tidal-Api | ||
timestamp=$(date +"%Y-%m-%d-%H-%M-%S") | ||
branch_name="tidal-music-tools/Update-Tidal-Api-$timestamp" | ||
git checkout -b $branch_name | ||
# Generate commit message with the number of changed files in the title and the list in the body | ||
commit_title="Add ${{ steps.check_changes.outputs.changed_file_count }} files via GitHub Actions" | ||
commit_body="Changed files:\n${{ steps.check_changes.outputs.changed_files }}" | ||
git add . | ||
git commit -m "Add new files via GitHub Actions" | ||
git commit -m "$commit_title"$'\n\n'"$commit_body" | ||
echo "branch_name=$branch_name" >> $GITHUB_OUTPUT | ||
- name: Push changes | ||
if: steps.check_changes.outputs.changes_detected == 'true' | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
BRANCH_NAME: ${{ steps.commit_changes.outputs.branch_name }} | ||
run: | | ||
git push origin tidal-music-tools/Update-Tidal-Api | ||
git push --set-upstream origin "${{env.BRANCH_NAME}}" | ||
- name: Create Pull Request via API | ||
if: steps.check_changes.outputs.changes_detected == 'true' | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
CHANGED_FILES: ${{ steps.check_changes.outputs.changed_files }} | ||
CHANGED_FILE_COUNT: ${{ steps.check_changes.outputs.changed_file_count }} | ||
BRANCH_NAME: ${{ steps.commit_changes.outputs.branch_name }} | ||
run: | | ||
PR_DATA=$(jq -n --arg title "DO NOT REVIEW - Testing :-)" \ | ||
--arg head "new-feature-branch" \ | ||
--arg base "main" \ | ||
--arg body "This PR was created by GitHub Actions." \ | ||
pr_title="Automatic Tidal API module update - ${{env.CHANGED_FILE_COUNT}} files changed" | ||
pr_body="Changed files:\n\n${{ env.CHANGED_FILES }}" | ||
pr_body=$(echo -e "$pr_body") | ||
pr_data=$(jq -n --arg title "$pr_title" \ | ||
--arg head "${{env.BRANCH_NAME}}" \ | ||
--arg base "${{ inputs.target_branch }}" \ | ||
--arg body "$pr_body" \ | ||
'{title: $title, head: $head, base: $base, body: $body}') | ||
echo $pr_data | ||
curl -X POST \ | ||
-H "Authorization: token $GITHUB_TOKEN" \ | ||
-H "Accept: application/vnd.github.v3+json" \ | ||
-d "$PR_DATA" \ | ||
-d "$pr_data" \ | ||
https://api.github.com/repos/${{ github.repository }}/pulls |