diff --git a/.github/workflows/update-topics.yaml b/.github/workflows/update-topics.yaml new file mode 100644 index 0000000000..be0a962b35 --- /dev/null +++ b/.github/workflows/update-topics.yaml @@ -0,0 +1,72 @@ +name: Update release topics +on: + workflow_dispatch: + inputs: + expected_status: + description: What type of release is the next expected release + required: true + default: RC + type: choice + options: + - RC + - Release + expected_date: + description: Expected release date e.g. July 11th + required: true + type: string +concurrency: ${{ github.workflow }} +jobs: + bot: + name: Release topic update + runs-on: ubuntu-latest + environment: Matrix + steps: + - id: stable + uses: fangqiuming/latest-release-version@45b2da0e20968cd18c356c548d3c5ccb7318bb8f + + - uses: actions/github-script@v6 + env: + HS_URL: ${{ secrets.BETABOT_HS_URL }} + LOBBY_ROOM_ID: ${{ secrets.ROOM_ID }} + PUBLIC_ROOM_ID: "!YTvKGNlinIzlkMTVRl:matrix.org" + ANNOUNCEMENT_ROOM_ID: "!bijaLdadorKgNGtHdA:matrix.org" + TOKEN: ${{ secrets.BETABOT_ACCESS_TOKEN }} + RELEASE_TOPIC: "Stable: v${{ steps.stable.outputs.tag_name }} | Release status: ${{ inputs.expected_status }} expected ${{ inputs.expected_date }}" + with: + script: | + const { HS_URL, TOKEN, RELEASE_TOPIC, LOBBY_ROOM_ID, PUBLIC_ROOM_ID, ANNOUNCEMENT_ROOM_ID } = process.env; + + const regex = /Stable: v(\d+.\d+.\d+) \| Release status: (\w+) expected (\w+ \d+\w+)/gm; + + async function updateReleaseInTopic(roomId) { + const apiUrl = `${HS_URL}/_matrix/client/v3/rooms/${roomId}/state/m.room.topic/`; + const headers = { + "Content-Type": "application/json", + "Authorization": `Bearer ${TOKEN}`, + }; + const res = await fetch(apiUrl, { + method: "GET", + headers, + }); + + const data = await res.json(); + const topic = data.topic.replace(regex, RELEASE_TOPIC); + if (topic === data.topic) { + console.log(roomId, "nothing to do"); + } + + await fetch(apiUrl, { + method: "PUT", + body: { + ...data, + topic, + }, + headers, + }); + console.log(roomId, "topic updated"); + } + + await updateReleaseInTopic(LOBBY_ROOM_ID); + +# await updateReleaseInTopic(PUBLIC_ROOM_ID); +# await updateReleaseInTopic(ANNOUNCEMENT_ROOM_ID);