Files
guru/scripts/irc_notify.py
Dustin Smith 7b6155cb78 Add CI/CD for Forgejo, for use on Codeberg
This commit replicates the CI/CD behavior we currently have on GitHub
by making the following changes:

- Jobs that used Actions were replaced with in-repo scripts. This
  removes the dependency on GitHub and makes the overall pipeline more
  forge-agnostic.

  - rectalogic/notify-irc replaced with ./scripts/irc_notify.py

  - pkgcore/pkgcheck-action replaced with ./scripts/pkgcheck.sh

- Actions that used `gh` (the GitHub CLI) were replaced with in-repo
  scripts that perform the same action but with the Forgejo API.

  - ./scripts/last_status.py to get the last status of a completed job
    (e.g. succeeded, failed, canceled)

  - ./scripts/last_successful_commit.py to get the last commit that had
    a successful job

- Forgejo-specific changes

  - Variables renamed from "github" to "forgejo" where appropriate
    (though Forgejo lets you get away with keeping them as "github" to
    make migration easier)

  - Use ./.forgejo/ instead of ./.github/ -- this will simultaneously
    keep the GitHub actions intact while also disabling the GitHub
    actions from running in Forgejo

- Codeberg-specific changes

  - Use codeberg-tiny-lazy shared runner for {duplicates,emails}.yml

  - Use codeberg-medium-lazy shared runner for pkgcheck.yml

Signed-off-by: Dustin Smith <d.usty360@gmail.com>
Part-of: https://codeberg.org/gentoo/guru/pulls/30
Merges: https://codeberg.org/gentoo/guru/pulls/30
Signed-off-by: Thomas Bracht Laumann Jespersen <laumann@gentoo.org>
2026-08-21 21:40:26 +02:00

53 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
# A quick and dirty Python script to send a message to an IRC channel.
import os
import socket
import ssl
nick = bytes(os.getenv("IRC_NICK", "notguru-cicd"), "ascii")
host = os.getenv("IRC_HOST", "irc.libera.chat")
port = int(os.getenv("IRC_PORT", "6697"))
channel = bytes(os.getenv("IRC_CHANNEL", "##notgentoo-guru"), "ascii")
message = bytes(os.getenv("IRC_MESSAGE", "Howdy!"), "ascii")
context = ssl.create_default_context()
def main():
print("Connecting to IRC network...")
sock = socket.create_connection((host, port))
ssock = context.wrap_socket(sock, server_hostname=host)
# Let the server speak up first before we send anything
buf = ssock.recv()
if len(buf) == 0:
raise Exception("Unexpected disconnect")
# Identify ourselves to the server, then join a channel to send a message.
# We send VERSION last since the response (351) is predictable and used as
# an indicator that everything was received.
print("Sending commands...")
command = (
b"NICK " + nick + b"\n" +
b"USER " + nick + b" 0 0 :" + nick + b"\n" +
b"JOIN " + channel + b"\n" +
b"PRIVMSG " + channel + b" :" + message + b"\n" +
b"VERSION\n"
)
ssock.sendall(command)
print("Waiting for response...")
while True:
buf = ssock.recv()
if len(buf) == 0:
raise Exception("Unexpected disconnect")
lines = buf.split(b"\n")
for line in lines:
parts = line.split()
if len(parts) > 1 and parts[1] == b"351":
print("Message sent!")
return
main()