Change: kubectl and service image
Some checks failed
Build image and deploy / release-image (push) Successful in 1m52s
Build image and deploy / deploy (push) Failing after 47s

This commit is contained in:
2024-10-18 16:24:02 +00:00
parent 8464b1e2a8
commit f98b81d3b3
9 changed files with 76 additions and 102 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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 ?? '',
};

View File

@@ -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;

View File

@@ -11,8 +11,8 @@ export async function loadCommands(client: ExtendedClient): Promise<Array<string
for(const folder of commandFolders){
const commandsPath = path.join(foldersPath, folder);
const commandsFiles = path.basename(__filename).endsWith('.ts')
? readdirSync(commandsPath).filter(file => 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);

View File

@@ -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

View File

@@ -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:

View File

@@ -1,8 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: regcred
namespace: algo-dcbot
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson:

View File

@@ -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-----