Change: kubectl and service image
This commit is contained in:
@@ -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
|
||||
@@ -19,6 +16,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
|
||||
with:
|
||||
@@ -51,3 +52,27 @@ jobs:
|
||||
${{ env.CONTAINER_REGISTRY }}/${{ env.GITEA_REPO }}:${{ env.GITEA_REF_NAME }}
|
||||
${{ 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
|
||||
@@ -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,30 +29,30 @@ 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;
|
||||
|
||||
14
config.ts
14
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 ?? '',
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
@@ -1,8 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: regcred
|
||||
namespace: algo-dcbot
|
||||
type: kubernetes.io/dockerconfigjson
|
||||
data:
|
||||
.dockerconfigjson:
|
||||
29
rootca.pem
29
rootca.pem
@@ -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-----
|
||||
Reference in New Issue
Block a user