Update video upload blog links #1161
Workflow file for this run
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
name: Update clients PRs | |
on: | |
# Trigger the workflow on pull requests targeting the main branch | |
pull_request: | |
types: [assigned, unassigned, opened, reopened, synchronize, edited, labeled, unlabeled, edited, closed] | |
branches: | |
- main | |
jobs: | |
get_available_profiles: | |
runs-on: ubuntu-latest | |
outputs: | |
profiles: ${{ steps.get-profiles-step.outputs.profiles }} | |
steps: | |
- uses: actions/checkout@v2 | |
- id: get-profiles-step | |
uses: ./.github/actions/get-profiles | |
update_client_pr: | |
if: github.event.action != 'closed' | |
runs-on: ubuntu-latest | |
needs: [ get_available_profiles ] | |
strategy: | |
fail-fast: false | |
matrix: | |
profile: ${{ fromJson(needs.get_available_profiles.outputs.profiles) }} | |
env: | |
CLIENT_PATH: generated-clients/${{ matrix.profile.name }} | |
CLIENT_REPOSITORY: ${{ github.repository_owner }}/${{ matrix.profile.repository }} | |
steps: | |
- name: Check out repository code | |
uses: actions/checkout@v2 | |
- name: Set up JDK 8 | |
uses: actions/setup-java@v2 | |
with: | |
java-version: '8' | |
distribution: 'adopt' | |
- name: Cache openapi-generator dependencies and build | |
uses: actions/cache@v2 | |
with: | |
path: | | |
~/.m2/repository | |
${{ env.GITHUB_WORKSPACE }}/apivideo-generator/target | |
key: ${{ runner.os }}-build-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-build- | |
- name: Checkout client repository | |
uses: actions/checkout@v2 | |
with: | |
repository: ${{ env.CLIENT_REPOSITORY }} | |
token: ${{ secrets.PAT }} | |
path: ${{ env.CLIENT_PATH }} | |
- name: Remove files to allow files deletion from git | |
run: | | |
cd ${{ env.CLIENT_PATH }} | |
shopt -s extglob | |
rm -Rf !(.git|examples|.|..) | |
- name: Generate client | |
run: mvn package -P ${{ matrix.profile.name }} | |
# Make changes to pull request here | |
- uses: peter-evans/create-pull-request@v3 | |
id: cpr | |
with: | |
token: ${{ secrets.PAT }} | |
path: ${{ env.CLIENT_PATH }} | |
commit-message: ${{ github.event.pull_request.title }} | |
committer: GitHub <[email protected]> | |
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> | |
branch: ${{ github.event.pull_request.head.ref }} | |
title: ${{ github.event.pull_request.title }} | |
body: | | |
> ${{ github.event.pull_request.body }} | |
> Created by @${{ github.actor }} via ${{ github.event.pull_request.html_url }} | |
delete-branch: true | |
labels: ${{ join(github.event.pull_request.labels.*.name) }} | |
assignees: ${{ join(github.event.pull_request.assignees.*.login) }} | |
# reviewers: ${{ join(github.event.pull_request.requested_reviewers.*.login) }} #TODO | |
# draft: true | |
- name: Archive production artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.profile.name }}-documentation-artifact | |
path: | | |
${{ env.CLIENT_PATH }}/documentation.md | |
- name: Check tests results | |
uses: apivideo/[email protected] | |
if: ${{ steps.cpr.outputs.pull-request-head-sha }} | |
with: | |
token: ${{ secrets.PAT }} | |
repo: ${{ matrix.profile.repository }} | |
owner: ${{ github.repository_owner }} | |
sha: ${{ steps.cpr.outputs.pull-request-head-sha }} | |
generate_documentation: | |
if: github.event.action != 'closed' | |
runs-on: ubuntu-latest | |
needs: [update_client_pr] | |
steps: | |
- name: Check out repository code | |
uses: actions/checkout@v2 | |
- name: Download all workflow run artifacts | |
uses: actions/download-artifact@v3 | |
# print a debug message | |
- name: Checkout client repository | |
uses: actions/checkout@v2 | |
with: | |
repository: ${{ github.repository_owner }}/api.video-documentation | |
token: ${{ secrets.PAT }} | |
path: generated-clients/documentation | |
- name: Remove files to allow files deletion from git | |
run: | | |
cd generated-clients/documentation | |
shopt -s extglob | |
rm -Rf !(.git|examples|.|..) | |
- run: | | |
for dir in *-documentation-artifact; do | |
if [ -d "$dir" ]; then | |
prefix=$(echo "$dir" | sed 's/-documentation-artifact//') | |
if [ -f "$dir/documentation.md" ]; then | |
cp "$dir/documentation.md" "templates/documentation/sdks/api-clients/apivideo-${prefix}-client.md" | |
fi | |
fi | |
done | |
ls -la templates/documentation/sdks/api-clients/ | |
- name: Copy documentation files | |
run: | | |
cp -R templates/documentation/* generated-clients/documentation | |
cp -R templates/documentation/.github generated-clients/documentation | |
cp -R oas_apivideo.yaml generated-clients/documentation/openapi.yaml | |
- uses: peter-evans/create-pull-request@v3 | |
id: cpr | |
with: | |
token: ${{ secrets.PAT }} | |
path: generated-clients/documentation | |
commit-message: ${{ github.event.pull_request.title }} | |
committer: GitHub <[email protected]> | |
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> | |
branch: ${{ github.event.pull_request.head.ref }} | |
title: ${{ github.event.pull_request.title }} | |
body: | | |
> ${{ github.event.pull_request.body }} | |
> Created by @${{ github.actor }} via ${{ github.event.pull_request.html_url }} | |
delete-branch: true | |
labels: ${{ join(github.event.pull_request.labels.*.name) }} | |
assignees: ${{ join(github.event.pull_request.assignees.*.login) }} | |
merge_client_pr: | |
# this job will only run if the PR has been merged | |
if: github.event.action == 'closed' && github.event.pull_request.merged == true | |
runs-on: ubuntu-latest | |
needs: [ get_available_profiles ] | |
strategy: | |
matrix: | |
profile: | |
- ${{ fromJson(needs.get_available_profiles.outputs.profiles) }} | |
- name: documentation | |
repository: api.video-documentation | |
env: | |
CLIENT_REPOSITORY: ${{ github.repository_owner }}/${{ matrix.profile.repository }} | |
steps: | |
- run: | | |
echo PR ${{ github.event.repo.name }}#${{ github.event.number }} has been merged | |
- name: Look for existing PRs and merge them | |
id: commit | |
uses: actions/github-script@v3 | |
with: | |
github-token: ${{ secrets.PAT }} | |
script: | | |
const { data: pullRequests } = await github.request(`GET /repos/${process.env.CLIENT_REPOSITORY}/pulls`, { head: context.payload.pull_request.head.label }); | |
if (pullRequests.length > 0) { | |
pullRequests.forEach(async (pullRequest) => { | |
console.log(`Found ${pullRequest.state} PR ${process.env.CLIENT_REPOSITORY}#${pullRequest.number}`); | |
const mergeResponse = await github.request(`PUT /repos/${process.env.CLIENT_REPOSITORY}/pulls/${pullRequest.number}/merge`); | |
console.log('mergeResponse', mergeResponse); | |
}); | |
} else { | |
console.log(`There are no PRs from branch ${context.payload.pull_request.head.ref} on ${process.env.CLIENT_REPOSITORY} repository.`); | |
} | |
close_client_pr: | |
# this job will only run if the PR has been closed without being merged | |
if: github.event.action == 'closed' && github.event.pull_request.merged == false | |
runs-on: ubuntu-latest | |
needs: [ get_available_profiles ] | |
strategy: | |
matrix: | |
profile: | |
- ${{ fromJson(needs.get_available_profiles.outputs.profiles) }} | |
- name: documentation | |
repository: api.video-documentation | |
env: | |
CLIENT_REPOSITORY: ${{ github.repository_owner }}/${{ matrix.profile.repository }} | |
steps: | |
- run: | | |
echo PR ${{ github.event.repo.name }}#${{ github.event.number }} has been closed | |
- name: Look for existing PRs and close them | |
id: commit | |
uses: actions/github-script@v3 | |
with: | |
github-token: ${{ secrets.PAT }} | |
script: | | |
const { data: pullRequests } = await github.request(`GET /repos/${process.env.CLIENT_REPOSITORY}/pulls`, { head: context.payload.pull_request.head.label }); | |
if (pullRequests.length > 0) { | |
pullRequests.forEach(async (pullRequest) => { | |
console.log(`Found ${pullRequest.state} PR ${process.env.CLIENT_REPOSITORY}#${pullRequest.number}`); | |
await github.request(`PATCH /repos/${process.env.CLIENT_REPOSITORY}/pulls/${pullRequest.number}`, { state: 'closed' }); | |
}); | |
} else { | |
console.log(`There are no PRs from branch ${context.payload.pull_request.head.ref} on ${process.env.CLIENT_REPOSITORY} repository.`); | |
} | |
for f of *; do | |
case $f in | |
*-clients) | |
print $f | |
;; | |
esac | |
done |