Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: youtube to anchor workflow #805

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
c0bcfd6
add youtube-to-anchor action foler
AnimeshKumar923 Jul 15, 2023
cb321a5
add video ID of https://youtu.be/dqPTSTHZNB8
AnimeshKumar923 Jul 15, 2023
73cb2ba
add action.yml file from documentation
AnimeshKumar923 Jul 15, 2023
ffc22c3
add more env variables to action.yml file
AnimeshKumar923 Jul 15, 2023
f823cfb
increase timeout
AnimeshKumar923 Jul 15, 2023
03d139f
increase timeout more
AnimeshKumar923 Jul 15, 2023
a954ae8
add save-as-draft env variable
AnimeshKumar923 Jul 15, 2023
bf2b926
modify redirection link
AnimeshKumar923 Jul 15, 2023
dd13b58
modify redirection link
AnimeshKumar923 Jul 15, 2023
c07485d
modify redirection link
AnimeshKumar923 Jul 15, 2023
089a42e
redirection link change
AnimeshKumar923 Jul 15, 2023
031ef70
update YAML file location
AnimeshKumar923 Jul 15, 2023
b38e0fe
delete folder, testing something
AnimeshKumar923 Jul 15, 2023
40a39c3
Create main.yml
AnimeshKumar923 Jul 15, 2023
1164f0f
Rename main.yml to youtube-to-anchor.yml
AnimeshKumar923 Jul 15, 2023
55ebe8c
Create episode.json
AnimeshKumar923 Jul 15, 2023
313bcca
Rename youtube-to-anchor.yml to youtube-to-anchor.txt
AnimeshKumar923 Jul 15, 2023
5d89c22
Update youtube-to-anchorFM.yml
AnimeshKumar923 Jul 15, 2023
129cd9b
Update episode.json
AnimeshKumar923 Jul 15, 2023
00eebf0
remove files which are causing confusion
AnimeshKumar923 Jul 15, 2023
249107f
add demo video ID for test
AnimeshKumar923 Jul 15, 2023
a3ddd00
Add files required for the workflow
AnimeshKumar923 Jul 16, 2023
d53b549
Create yt-to-anchor.yml
AnimeshKumar923 Jul 16, 2023
d0c31e4
add demo video ID for test
AnimeshKumar923 Jul 16, 2023
0c97933
Rename yt-to-anchor.yml to youtube-to-anchorFM.yml
AnimeshKumar923 Jul 16, 2023
95374e1
add demo video ID for test
AnimeshKumar923 Jul 16, 2023
f53c123
update environment variables
AnimeshKumar923 Jul 16, 2023
43320c2
delete folder, testing workflow after deletion
AnimeshKumar923 Jul 18, 2023
0b09fbb
update environment variables to include current branch
AnimeshKumar923 Jul 18, 2023
881cb40
add video ID for testing
AnimeshKumar923 Jul 18, 2023
98335ff
add video ID for testing
AnimeshKumar923 Jul 18, 2023
a017df8
add videos ID for test
AnimeshKumar923 Jul 18, 2023
f77f15f
update environment variables
AnimeshKumar923 Jul 18, 2023
c0295b7
add Video ID for testing
AnimeshKumar923 Jul 18, 2023
4c4ca18
Merge pull request #2 from AnimeshKumar923/folder-deletion-test
AnimeshKumar923 Jul 19, 2023
ac3067d
re-add video ID which failed
AnimeshKumar923 Jul 20, 2023
4ee6468
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
a4f7aac
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
5116fde
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
04169c5
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
57c8795
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
f52739d
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
0c1e83e
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
8346155
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
0b2e42e
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
f1094f9
add reusable file
AnimeshKumar923 Jul 21, 2023
73a640d
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
de04580
modify code to run on workflow_dispatch
AnimeshKumar923 Jul 21, 2023
b141563
delete reusable file
AnimeshKumar923 Jul 21, 2023
7e9f8bb
Change sequence of workflow
AnimeshKumar923 Jul 21, 2023
f5f029f
modify code, improvement
AnimeshKumar923 Jul 21, 2023
9a67cd1
modify code, improvement
AnimeshKumar923 Jul 21, 2023
34ebed1
back to square one ;)
AnimeshKumar923 Jul 21, 2023
5deef6d
remove existing video ID
AnimeshKumar923 Jul 21, 2023
e5f6374
modify code
AnimeshKumar923 Jul 21, 2023
5699464
modify code
AnimeshKumar923 Jul 21, 2023
5d4cb04
modify code
AnimeshKumar923 Jul 21, 2023
6541962
modify code
AnimeshKumar923 Jul 21, 2023
68944b2
fix typo of episode
AnimeshKumar923 Jul 21, 2023
00d7612
modify code, change EPISODE_PATH
AnimeshKumar923 Jul 21, 2023
6ca3e6f
remove episode.json file
AnimeshKumar923 Jul 21, 2023
b5aeb11
modify description, clean-up of comments
AnimeshKumar923 Jul 21, 2023
0e3bfbf
update description of video_id
AnimeshKumar923 Jul 24, 2023
c762063
rename file name and workflow name
AnimeshKumar923 Jul 24, 2023
c6429ac
ci: merge commit from `workflow-dispatch` branch to `yt-to-anchor` br…
AnimeshKumar923 Jul 24, 2023
02df609
Update youtube-to-spotify-for-podcasters.yml
AnimeshKumar923 Jul 24, 2023
f3a044f
Add 'Spotify podcast upload' section
AnimeshKumar923 Sep 11, 2023
3099993
Update 'Spotify Podcast' section
AnimeshKumar923 Sep 11, 2023
c983cee
remove irrelevant info in FAQ
AnimeshKumar923 Sep 13, 2023
ce61337
remove line 219
AnimeshKumar923 Sep 13, 2023
ccb3c66
remove 'save as draft' label
AnimeshKumar923 Sep 15, 2023
a8c3a72
Merge branch 'asyncapi:master' into youtube-to-anchor-workflow
AnimeshKumar923 Sep 18, 2023
9cf4d4d
remove draft label
AnimeshKumar923 Sep 24, 2023
9e0e608
remove divider
AnimeshKumar923 Sep 25, 2023
64b7746
Update youtube-to-spotify-for-podcasters.yml
AnimeshKumar923 Sep 27, 2023
8db2468
Update .github/workflows/youtube-to-spotify-for-podcasters.yml
AnimeshKumar923 Oct 9, 2023
132a40b
Update youtube-to-spotify-for-podcasters.yml
AnimeshKumar923 Oct 20, 2023
5e46b9f
Update youtube-to-spotify-for-podcasters.yml
AnimeshKumar923 Oct 23, 2023
12e9f88
Merge branch 'master' into youtube-to-anchor-workflow
derberg Oct 31, 2023
045a9dd
Update MEETINGS_ORGANIZATION.md
AnimeshKumar923 Oct 31, 2023
9ef4a4b
correct grammar and spellings
thulieblack Nov 13, 2023
465dd87
Merge branch 'master' into youtube-to-anchor-workflow
thulieblack Nov 13, 2023
eaa2363
Update MEETINGS_ORGANIZATION.md
AnimeshKumar923 Nov 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .github/workflows/youtube-to-spotify-for-podcasters.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: 'Upload Episode from YouTube To Spotify for Podcasters'

on:
workflow_dispatch:
inputs:
video_id:
description: 'Enter YouTube video ID to upload on Spotify for Podcasters.'
required: true

jobs:
upload_episode:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Create episode.json file
run: |
# Get the video ID from the workflow_dispatch input.
video_id="${{ github.event.inputs.video_id }}"

# Create episode.json content with the video ID
json_content="{\"id\": \"${video_id}\"}"

# Write the content to episode.json in the workspace directory
echo "${json_content}" > episode.json

# Verify the content was written successfully
cat episode.json
- name: Upload Episode from YouTube To Anchor.Fm
uses: Schrodinger-Hat/youtube-to-anchorfm@99a4a5409262b356a1bb54e6756d230ee97d3407 #commit related to https://github.com/Schrodinger-Hat/youtube-to-anchorfm/commit/99a4a5409262b356a1bb54e6756d230ee97d3407 || The latest commit which is of Oct 22, 2023
env:
ANCHOR_EMAIL: ${{ secrets.ANCHOR_EMAIL }}
ANCHOR_PASSWORD: ${{ secrets.ANCHOR_PASSWORD }}
EPISODE_PATH: /github/workspace
URL_IN_DESCRIPTION: true
LOAD_THUMBNAIL: true
POSTPROCESSOR_ARGS: 'ffmpeg:-ac 1'
109 changes: 89 additions & 20 deletions MEETINGS_ORGANIZATION.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
This document covers the aspect of different meetings organization at AsyncAPI.
This document covers the aspects of different meeting organizations at AsyncAPI.

## FAQ

### What do I need to schedule a meeting?

To schedule a meeting, you need to be:
- one of the licensed Zoom users associated with the AsyncAPI Zoom account. It is required because only licensed users can start meeting, live transcripts, and streaming.
- one of the licensed Zoom users associated with the AsyncAPI Zoom account. It is required because only licensed users can start meetings, live transcripts, and streaming.
- GitHub Action workflow for `Ad Hoc` meeting scheduling should be updated. Newly licensed users should be added as alternative hosts.
- a member of [GitHub team called meetings-organizars](https://github.com/orgs/asyncapi/teams/meetings-organizers). It is required because only maintainers of the given repository can manually trigger GitHub Actions workflows. This group has a `Maintain` role in the `community` repository where meeting automation is implemented.
- a member of a team in the AsyncAPI Restream account. It is required because hosts must log in to Restream before they start streaming the meeting from Zoom and modify the stream's title that will show up on social platforms.
- a member of the AsyncAPI YouTube account. It is required because after the meeting is over, hosts need to add live their stream recording to the proper YouTube Playlist to improve recording discoverability.
- a member of [GitHub team called meetings-organizers](https://github.com/orgs/asyncapi/teams/meetings-organizers). This is required because only repository maintainers can manually trigger GitHub Actions workflows. This group has a `Maintain` role in the `community` repository where meeting automation is implemented.
- a member of a team in the AsyncAPI Restream account. It is required because hosts must log in to Restream before streaming the meeting from Zoom and modify the stream's title that will appear on social platforms.
- a member of the AsyncAPI YouTube account. It is required because hosts need to add live stream recordings to the proper YouTube Playlist after the meeting is over to improve recording discoverability.

### What meetings do we have?

Expand All @@ -25,16 +25,16 @@ To schedule a meeting, you need to be:

We have an automated workflow in place:
1. Automation starts after clicking **Run workflow**. (Unless there is another GitHub Actions outage and proper events are not delivered to automation :smiley: )
1. It creates a new meeting in Zoom. It is by default configured to support live streaming
1. It creates a new meeting in Zoom. It is, by default, configured to support live streaming
1. It creates a GitHub issue with all details about the meeting
1. It creates a new Google Calendar entry with special metadata containing the GitHub issue number
1. It sends a tweet with information about a newly scheduled event

### What are my responsibilities as meeting host?

Technically there are two types of meetings:
- Zoom-first: Meeting takes place on Zoom and through integration with Restream.io it is streamed to different channels. These meetings happen on Zoom to enable as many people as possible to join live conversation.
- Restream-first: Meeting takes place on Restream and is is streamed to different channels. These meetings are focused on showing or explaining some topic without live audio conversation with the audience.
Technically, there are two types of meetings:
- Zoom-first: The meeting takes place on Zoom and is streamed to different channels through integration with Restream.io. The goal is to enable as many people as possible to join the live conversation.
- Restream-first: The meeting takes place on Restream and is streamed to different channels. These meetings are focused on showing or explaining some topic without a live audio conversation with the audience.

#### Zoom-first

Expand All @@ -53,7 +53,7 @@ This is what you need to do to kick it off:
1. Provide title and description:

- Title for the live stream that corresponds with the meeting you just started,
- Meeting description must be provided even if the field is empty, otherwise the old one from other streams will be used.
- Meeting description must be provided even if the field is empty; otherwise, the old one from other streams will be used.

<img src="assets/meetings/restream3.png" width="50%">

Expand All @@ -75,23 +75,23 @@ This is what you need to do to kick it off:

#### Restream-first

You need to first start with YouTube, even though Restream can directly stream there. It is because by
You must start with YouTube first, even though Restream can directly stream there. It is because by

This is what you need to do to kick it off:

1. In [YouTube](https://youtube.com) click on your profile picture and select `Switch account`:
1. In [YouTube](https://youtube.com), click on your profile picture and select `Switch account`:

<img src="assets/meetings/yt1.png" width="40%">

1. Select `AsyncAPI`. If you do not see it on the list, means you did not have all access rights needed to setup a live stream:
1. Select `AsyncAPI`. If you do not see it on the list, it means you did not have all the access rights needed to set up a live stream:

<img src="assets/meetings/yt2.png" width="40%">

1. Click on `Create` and select `Go live`:

<img src="assets/meetings/yt3.png" width="40%">

1. Once new live stream is created, in the list of `Upcomming` streams, click `View in Live Control Room` <img src="assets/meetings/yt5.png" width="3%"> icon next to your live stream:
1. Once a new live stream is created, in the list of `Upcoming` streams, click `View in Live Control Room` <img src="assets/meetings/yt5.png" width="3%"> icon next to your live stream:

<img src="assets/meetings/yt4.png" width="50%">

Expand All @@ -103,7 +103,7 @@ This is what you need to do to kick it off:

<img src="assets/meetings/restream1.png" width="50%">

1. After enabling audio, video and providing name, you will see a Restream Studio.
1. After enabling the audio, video and providing the name, you will see a Restream Studio.

1. `Edit` the title and description of the stream:

Expand All @@ -112,15 +112,15 @@ This is what you need to do to kick it off:
1. Provide title and description and click `Next`:

- Title for the live stream that corresponds with the meeting you just started,
- Meeting description must be provided even if the field is empty, otherwise the old one from other streams will be used.
- Meeting description must be provided even if the field is empty; otherwise, the old one from other streams will be used.

<img src="assets/meetings/restream5.png" width="50%">

1. `Edit` YouTube destination:

<img src="assets/meetings/restream6.png" width="40%">

1. Make sure you do not create new event but you select the one you already created on YouTube, with closed captions on:
1. Make sure you do not create a new event, but select the one you already created on YouTube, with closed captions on:

<img src="assets/meetings/restream7.png" width="40%">

Expand All @@ -140,7 +140,7 @@ Subscribe to the [AsyncAPI Newsletter](https://asyncapi.com/newsletter) to get i
We have an automated workflow in place:
1. Automation starts every Friday at midnight
1. It gets information from Google Calendar about all the meetings scheduled for the upcoming week
1. It schedules a MailChimp campaign to send emails with a list of meetings. It's sent on Friday at 11AM in the subscriber's time zone
1. It schedules a MailChimp campaign to send emails with a list of meetings. It's sent on Friday at 11 AM in the subscriber's time zone

### Where can I find the AsyncAPI calendar?

Expand All @@ -156,7 +156,7 @@ We have an automated workflow in place:
1. It checks if a closed issue represents a future event
1. It removes meetings from the AsyncAPI Google Calendar

### How do I register a new regular meeting?
### How do I register for a new regular meeting?

Start [discussion in community repository](https://github.com/asyncapi/community/discussions). Explain the idea and justify why it requires a separate meeting. We currently have [approval from the Technical Steering Commitee](https://github.com/asyncapi/community/discussions/295) to pay for up to 8 Zoom licenses.

Expand All @@ -165,4 +165,73 @@ Once a new meeting is approved, add a [new workflow like this one](.github/workf

### How can I become a host?

Once your `Regular` meeting gets approved, contact `Fran Mendez` so that he can give you access to all required tools.
Once your `Regular` meeting gets approved, contact `Fran Mendez` so he can give you access to all required tools.



## How do I publish broadcasted meetings as podcasts?

### Why do we need this feature?

- Some people prefer to listen to the video/livestream as an audio (podcast) instead of watching the video.

- The goal is to upload our AsyncAPI video/live streams on `Spotify For Podcasters` platform, ultimately allowing the listener to play the episodes on Spotify. Almost every YouTube video can be converted into a podcast.


### Who can upload the videos?

- The workflow can only be triggered by a person with write access to the `master` branch of the `asyncapi/community` repository.

### What is needed?

- The YouTube video ID is needed to trigger the workflow.

### What is YouTube video ID?

- A YouTube video ID is a unique combination of characters that identifies a specific video on the YouTube platform. It's used in the URL of the video to direct users to the exact video they want to watch. The video ID is typically a sequence of letters, numbers, and special characters that generally comes after the "v=" parameter in the URL.
- [More examples](#list-of-different-types-of-youtube-links) of video ID are given below: ⬇️

#### How to find YouTube ID?

Let's take this video link, for example: https://www.youtube.com/watch?v=3rg_7hIb9PQ.

Here the video ID is the word/entity after `https://www.youtube.com/watch?v=`, i.e., `3rg_7hIb9PQ`


### List of different types of YouTube links

- `https://www.youtube.com/watch?v=VIDEO_ID`
- Here, it can be https://www.youtube.com/watch?v=3rg_7hIb9PQ
- `https://youtu.be/VIDEO_ID`
- Here, it can be https://www.youtu.be/3rg_7hIb9PQ
- `https://www.youtube.com/embed/VIDEO_ID`
- Here, it can be https://www.youtube.com/embed/3rg_7hIb9PQ
- `https://www.youtube.com/playlist?list=PLAYLIST_ID`
- Here, it can be https://www.youtube.com/playlist?list=PLbi1gRlP7piiaD67o1F4EOPoZztg2r8l6
- `https://www.youtube.com/shorts/VIDEO_ID`
- Here, it can be https://www.youtube.com/shorts/3rg_7hIb9PQ
- `https://www.youtube.com/watch?v=VIDEO_ID&list=PLAYLIST_ID`
- Here, it can be https://www.youtube.com/watch?v=deLUAobdVpw&list=PLbi1gRlP7piiaD67o1F4EOPoZztg2r8l6
- `https://youtube.com/shorts/VIDEO_ID?feature=share`
- Here, it can be https://youtube.com/shorts/U5jUr8XAF_M?feature=share


### Step-by-step procedure

Here is an example with a procedure on how to use this workflow:

1. Go to the `Actions` section on GitHub.
2. Scroll down the menu on the left-hand side.
3. Click on the `Upload Episode from YouTube To Spotify for Podcasters` option.
4. Click on the `Run Workflow` button.
5. Provide the YouTube ID in the box.
6. Click on `Run workflow` button.
7. Wait for the workflow to finish. (Depending on video size, it may take some time to upload, so please have patience. Thank you.) .
8. A few moments later....Hurray! Your episode is now uploaded successfully!

You can also modify description and other information for uploaded podcast directly in Spotify:

1. Go to https://podcasters.spotify.com/.
2. Login using AsyncAPI account.
2. Go to `Episodes` section. There, you will see your latest upload.
3. Perform edits and save them.
Loading