From f98b81d3b3050ddf70688a982034f23092382e42 Mon Sep 17 00:00:00 2001 From: ytshih Date: Fri, 18 Oct 2024 16:24:02 +0000 Subject: [PATCH] Change: kubectl and service image --- .gitea/workflows/{image.yml => deploy.yml} | 35 +++++++++++++--- commands/roles/applyrole.ts | 48 +++++++++++----------- config.ts | 18 ++++---- events/handle-member-add.ts | 12 +++--- init/load-commands.ts | 4 +- k8s/deploy.algo-dcbot.yml | 13 +++--- k8s/secret.algo-dcbot.yaml | 11 ----- k8s/secret.regcred.yaml | 8 ---- rootca.pem | 29 ------------- 9 files changed, 76 insertions(+), 102 deletions(-) rename .gitea/workflows/{image.yml => deploy.yml} (61%) delete mode 100644 k8s/secret.algo-dcbot.yaml delete mode 100644 k8s/secret.regcred.yaml delete mode 100644 rootca.pem diff --git a/.gitea/workflows/image.yml b/.gitea/workflows/deploy.yml similarity index 61% rename from .gitea/workflows/image.yml rename to .gitea/workflows/deploy.yml index faea775..7e665a9 100644 --- a/.gitea/workflows/image.yml +++ b/.gitea/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: release-tag +name: Build image and deploy on: push @@ -6,9 +6,6 @@ on: jobs: release-image: runs-on: imgbuilder - # seems broken (2024/06/26) - # container: - # image: gitea/act_runner env: CONTAINER_REGISTRY: gitea.konchin.com GITEA_TAG: latest @@ -18,6 +15,10 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v3 + + - name: Set up Root CA + run: | + echo "${{ vars.ROOTCA }}" | tee rootca.pem - name: Set up Docker BuildX uses: docker/setup-buildx-action@v3 @@ -49,5 +50,29 @@ jobs: push: true tags: | ${{ env.CONTAINER_REGISTRY }}/${{ env.GITEA_REPO }}:${{ env.GITEA_REF_NAME }} - ${{ env.CONTAINER_REGISTRY }}/${{ env.GITEA_REPO }}:${{ env.GITEA_TAG }} + ${{ env.CONTAINER_REGISTRY }}/${{ env.GITEA_REPO }}:${{ env.GITEA_TAG }} + deploy: + needs: release-image + runs-on: imgbuilder + container: + image: gitea.konchin.com/image/kubectl + credentials: + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup kubeconfig + run: | + echo "${{ secrets.KUBE_CONFIG }}" > .kubeconfig + cat .kubeconfig + + - name: Deploy + run: | + kubectl --kubeconfig .kubeconfig apply -Rf k8s/ + + - name: Rollout restart + run: | + kubectl --kubeconfig .kubeconfig -n rickroll rollout restart deployment algo-dcbot diff --git a/commands/roles/applyrole.ts b/commands/roles/applyrole.ts index 0d56380..e8140d5 100644 --- a/commands/roles/applyrole.ts +++ b/commands/roles/applyrole.ts @@ -5,7 +5,7 @@ import discord, { SlashCommandRoleOption, SlashCommandStringOption, InteractionResponse, - Role, APIRole + Role, APIRole } from 'discord.js'; import {Command} from '../../classes/command'; @@ -14,7 +14,7 @@ import {logger} from '../../logger'; type CIOR = CommandInteractionOptionResolver; function isRole(role: Role | APIRole): role is Role { - return role['id'] !== null; + return role['id'] !== null; } class ApplyRole extends Command{ @@ -29,31 +29,31 @@ class ApplyRole extends Command{ if(!interaction.guild || !interaction.guild.id || !interaction.guild.name) throw Error('guild not exist'); - await interaction.reply('Start applying.'); - let counter: number = 0; + await interaction.reply('Start applying.'); + let counter: number = 0; - const memberList = await interaction.guild.members.fetch(); - logger.debug('fetch done'); + const memberList = await interaction.guild.members.fetch(); + logger.debug('fetch done'); - await memberList.each(async member => { - if (!role) - throw Error('role not exist'); - if (!interaction.guild) - throw Error('guild not exist'); - console.log(`${role.id}, ${member}`); + await memberList.each(async member => { + if (!role) + throw Error('role not exist'); + if (!interaction.guild) + throw Error('guild not exist'); + console.log(`${role.id}, ${member}`); - await interaction.guild.members.addRole({ - role: role.id, - user: member, - }); - logger.log(`role ${role} has been added to ${member}.`); - counter += 1; - if (counter % 10 === 0) - await interaction.editReply(`${counter} applied.`); - }); - await interaction.editReply(`All ${counter} applied.`); - logger.log(`All ${counter} applied.`); - + await interaction.guild.members.addRole({ + role: role.id, + user: member, + }); + logger.log(`role ${role} has been added to ${member}.`); + counter += 1; + if (counter % 10 === 0) + await interaction.editReply(`${counter} applied.`); + }); + await interaction.editReply(`All ${counter} applied.`); + logger.log(`All ${counter} applied.`); + }catch(err: unknown){ let message; if(err instanceof Error) message = err.message; diff --git a/config.ts b/config.ts index 6cc2ae5..7788468 100644 --- a/config.ts +++ b/config.ts @@ -3,20 +3,20 @@ import dotenv from 'dotenv'; dotenv.config(); export const config = { - // Token and client id can be found in Discord Developer Protol. + // Token and client id can be found in Discord Developer Protol. token: process.env.DC_TOKEN!, clientId: process.env.DC_CLIENTID!, - - // The user that the bot will DM when starts. + + // The user that the bot will DM when starts. adminId: process.env.ADMIN_ID ?? '', - nickname: '橘ありす', - playing: 'アイドルマスター シンデレラガールズ U149', + nickname: '橘ありす', + playing: 'アイドルマスター シンデレラガールズ U149', logger: { logFile: 'test.log', }, - - // The default role id to apply when new member join. - // Can be obtained in Discord from right clicking the role. - defaultRole: process.env.DEFAULT_ROLE ?? '', + + // The default role id to apply when new member join. + // Can be obtained in Discord from right clicking the role. + defaultRole: process.env.DEFAULT_ROLE ?? '', }; diff --git a/events/handle-member-add.ts b/events/handle-member-add.ts index aba0c24..7753aa3 100644 --- a/events/handle-member-add.ts +++ b/events/handle-member-add.ts @@ -6,7 +6,7 @@ import {logger} from '../logger'; import {config} from '../config'; function isMember( - member: GuildMember | PartialGuildMember + member: GuildMember | PartialGuildMember ): member is GuildMember { return member.partial === false; } @@ -21,11 +21,11 @@ export async function handleMemberAdd( if(!isMember(member)) throw Error('type mismatch: member.partial'); - await member.guild.members.addRole({ - role: config.defaultRole, - user: member - }); - logger.log(`${member} has been given role.`); + await member.guild.members.addRole({ + role: config.defaultRole, + user: member + }); + logger.log(`${member} has been given role.`); }catch(err: unknown){ let message; if(err instanceof Error) message = err.message; diff --git a/init/load-commands.ts b/init/load-commands.ts index 4cff8e7..d098520 100644 --- a/init/load-commands.ts +++ b/init/load-commands.ts @@ -11,8 +11,8 @@ export async function loadCommands(client: ExtendedClient): Promise file.endsWith('.ts')) - : readdirSync(commandsPath).filter(file => file.endsWith('.js')); + ? readdirSync(commandsPath).filter(file => file.endsWith('.ts')) + : readdirSync(commandsPath).filter(file => file.endsWith('.js')); for(const file of commandsFiles){ const filePath = path.join(commandsPath, file); const data = await import(filePath); diff --git a/k8s/deploy.algo-dcbot.yml b/k8s/deploy.algo-dcbot.yml index 430b54f..dbaf264 100644 --- a/k8s/deploy.algo-dcbot.yml +++ b/k8s/deploy.algo-dcbot.yml @@ -11,37 +11,34 @@ spec: selector: matchLabels: app: algo-dcbot - rel: stable template: metadata: labels: app: algo-dcbot - rel: stable - ver: '0.3' spec: containers: - name: dcbot - image: 'gitea.konchin.com/services/algo-dcbot:latest' + image: gitea.konchin.com/service/algo-dcbot:latest env: - name: DC_TOKEN valueFrom: secretKeyRef: name: algo-dcbot-secret - key: dcbot-token + key: DC_TOKEN - name: DC_CLIENTID valueFrom: secretKeyRef: name: algo-dcbot-secret - key: dcbot-id + key: DC_CLIENTID - name: ADMIN_ID valueFrom: secretKeyRef: name: algo-dcbot-secret - key: maintainer-id + key: ADMIN_ID - name: DEFAULT_ROLE valueFrom: secretKeyRef: name: algo-dcbot-secret - key: default-role-id + key: DEFAULT_ROLE imagePullSecrets: - name: regcred diff --git a/k8s/secret.algo-dcbot.yaml b/k8s/secret.algo-dcbot.yaml deleted file mode 100644 index dd8d62a..0000000 --- a/k8s/secret.algo-dcbot.yaml +++ /dev/null @@ -1,11 +0,0 @@ ---- -apiVersion: v1 -kind: Secret -metadata: - name: algo-dcbot-secret - namespace: algo-dcbot -data: - dcbot-id: - dcbot-token: - default-role-id: - maintainer-id: diff --git a/k8s/secret.regcred.yaml b/k8s/secret.regcred.yaml deleted file mode 100644 index da2736e..0000000 --- a/k8s/secret.regcred.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: regcred - namespace: algo-dcbot -type: kubernetes.io/dockerconfigjson -data: - .dockerconfigjson: diff --git a/rootca.pem b/rootca.pem deleted file mode 100644 index 22342b3..0000000 --- a/rootca.pem +++ /dev/null @@ -1,29 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFAjCCAuqgAwIBAgIUcrO3uxgk0RfJreCKLOEr/WBS91MwDQYJKoZIhvcNAQEL -BQAwGTEXMBUGA1UEAwwOS29uY2hpbi5jb20gQ0EwHhcNMjQwNjIyMTUyNjEyWhcN -MzQwNjIwMTUyNjEyWjAZMRcwFQYDVQQDDA5Lb25jaGluLmNvbSBDQTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJvKeaZpfeMG80GKWhyp84yKu72dA9CN -bR0+GKBUVH9ex/Oi6er3sh66K/ZIlirZ9icY7k6o4nOvmmkWECQ/22o+vAvpZ20Z -4BGggt3dERlaWH8M/BGLfrA2WF9gZk+uVGU14NfCaw5NGn4YczrcVl1jr/oCOuFU -taXCXq4R7ynYKq3dNOe8BoDck+dB+yh3sefkVymczTbzVfcDN/mW61ycllIhaRQr -pnlXWEaD5z5rkK9dKHb50fbywFeHwBBJVrtZ9dx+AaaPg3upMGst8V4w1HPShNw/ -tKQmYMsL4aVpHMUDv6q32b3MTAIKC9NkJG4JtTt1RBRPJLkFO24uTJmoAn/4lxMe -00gPQiWHdj6Ct8oEaJX84ERE1fmt8/HL1aX9vkZ6aGlEHd678xfcdusk9zkQp+k6 -XQiqEGyNUeMuc57wCSjZ7xquJRuAXk1WU10vi++Vxuot4RsxR4Jzv6ZcBa5H9LH8 -tDaFKNatRum37YQlAV9wIJ4L7592wzQFApK4c7JUA4c7wlor8c9RZR4a6/Z6E08T -IfiYoYPxEaWrm6fqHrpR/QUivNFPfY1YfKEyftk4ZqtVOg444eTeOMm17Uuv6E4N -haa9sve8wdP5M4mkiWXC5sayRSZXWDZ4eLKwkPdAFBvGL4UA8JSM66bQc0/5svxU -TxN5Dg8zwzPRAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwICBDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBT1RfHeNlj9dFTdCzffY95far8sWjANBgkqhkiG9w0BAQsF -AAOCAgEAPDTuvsrlPzJOay1qicJxSEKwgILbbrDMCiqGVaT/73rVjqWwbwO8tIp4 -VnHgVA6nX7xdSwTlzZkiMJ5RBvDDJXvFk/WbQZ9kf5o37XPvXuN4El2fifA1im/Q -qW+DB/TL2ZQhiuRq/StUQpjvvnxps6jOgafULBjzYJf/Rolb5TQWEvDmKguvFvgy -zzg9gpp7C9DiDhGVYEJFhOlvFJ/zqyzS1aDKYkinruGvopLj1zna6ZCVn5Gx7e3q -Puf4vdPBV0vG9naHQt9mJMfX+gMoedqewCotd9i+PzcFOtARrwWuR05sBhx+AKMr -yo4iuO/RPvcGa0V62H6BVQEUec6Yx+vkyCST9MAB48UDs2Bn1nRkZYOriTP16FrX -f8iYxZhsz0uKgs3HSVHeNL7rCSuvMCIHuYq5icMfMbqJ/B0+SmvSYeujTwgD6EfW -yqhbyvJJWlV12/LTit45XPRtFgEQhzHjYCH+CbatN6BSmSC/eYJnAbI/Oo9TaULy -iWZNPqiasRNjCc1Ku0+AQmdjR/ERXQS/JteJivSc0poQT3h0kTEJ4zpdPZ6BFCbb -pRQi37EtdB4UdRl7qsK6h0PSR/LyQwwF4K5nWOdSGLzDDLBtxIJEv2yOyy9AbjkW -Qtq8sb3dVMp5l8EhsA4rSv0mnX+5jKd5fI0CND53qf2trRuIqrI= ------END CERTIFICATE-----