diff --git a/.github/workflows/reindex.yml b/.github/workflows/reindex.yml index 82cb04680..4489c7093 100644 --- a/.github/workflows/reindex.yml +++ b/.github/workflows/reindex.yml @@ -1,15 +1,32 @@ -name: 'Reindex' +name: 'Post-release hooks' on: release: - types: [prereleased,released] + types: [prereleased, released] jobs: reindex: - name: 'Reindex updates' + name: 'Post-release hooks' runs-on: [self-hosted, FlipperZeroShell] steps: - - name: Trigger reindex + - name: 'Checkout code' + uses: actions/checkout@v4 + + - name: 'Trigger reindex' run: | curl --fail -L -H "Token: ${{ secrets.INDEXER_TOKEN }}" \ - "${{ secrets.INDEXER_URL }}"/firmware/reindex + "${{ secrets.INDEXER_URL }}"/firmware/reindex; + + - name: 'Send release notification' + if: ${{ github.event.action == 'released' }} + run: | + echo '${{ secrets.FIREBASE_TOKEN }}' > firebase-token.json; + python3 -m pip install firebase-admin==6.4.0; + python3 scripts/send_firebase_notification.py \ + "--version=${{ github.event.release.name }}" \ + "--token=firebase-token.json"; + + - name: 'Remove firebase token' + if: always() + run: | + rm -rf firebase-token.json; diff --git a/scripts/send_firebase_notification.py b/scripts/send_firebase_notification.py new file mode 100644 index 000000000..102cf0066 --- /dev/null +++ b/scripts/send_firebase_notification.py @@ -0,0 +1,44 @@ +import argparse +import logging +from firebase_admin import messaging, credentials, initialize_app + + +class FirebaseNotifications: + def __init__(self, service_account_file): + try: + cred = credentials.Certificate(service_account_file) + self.firebase_app = initialize_app(cred) + except Exception as e: + logging.exception(e) + raise e + + def send(self, title, body, condition): + try: + message = messaging.Message( + notification=messaging.Notification(title=title, body=body), + condition=condition, + ) + messaging.send(message, app=self.firebase_app) + except Exception as e: + logging.exception(e) + raise e + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--token_file", help="Firebase token file", required=True) + parser.add_argument( + "--version", help="Firmware version to notify with", required=True + ) + args = parser.parse_args() + return args + + +if __name__ == "__main__": + args = parse_args() + notification = FirebaseNotifications(args.token_file) + notification.send( + title="Firmware Update Available", + body=f"New firmware version is ready to install: {args.version}", + condition="'flipper_update_firmware_release' in topics", + )