forked from PluralFlux/PluralFlux
Compare commits
10 Commits
97a742fa22
...
Develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96c2abc06a | ||
| c2a88804ad | |||
| 2b31cc2ae9 | |||
| b602e654ec | |||
| 732ad36bba | |||
| 8446559bfb | |||
| 14ef1581c1 | |||
| 10eab6de74 | |||
| d8682c2a1b | |||
| 20e8564c15 |
49
.gitea/workflows/build-dev.yml
Normal file
49
.gitea/workflows/build-dev.yml
Normal file
@@ -0,0 +1,49 @@
|
||||
name: Build Dev instance
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["develop", "Develop"]
|
||||
pull_request:
|
||||
branches: ["develop", "Develop"]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Docker BuildX
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: login to gitea registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ gitea.server_url }}
|
||||
username: ${{ gitea.actor }}
|
||||
password: ${{ secrets.GITEA }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: |
|
||||
engineering.sanya.gay/pluralflux/pluralflux-dev:latest
|
||||
|
||||
- name: Deploy bot
|
||||
uses: appleboy/ssh-action@v1.0.3
|
||||
with:
|
||||
host: ${{ secrets.SSH_HOST }}
|
||||
username: ${{ secrets.SSH_USER }}
|
||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
port: 22
|
||||
script: |
|
||||
cd ${{ secrets.BOT_DIRECTORY }}
|
||||
docker compose pull
|
||||
docker compose up -d pluralflux-dev
|
||||
49
.gitea/workflows/build-main.yml
Normal file
49
.gitea/workflows/build-main.yml
Normal file
@@ -0,0 +1,49 @@
|
||||
name: nodeJS remote worker
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["main"]
|
||||
pull_request:
|
||||
branches: ["main"]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Docker BuildX
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: login to gitea registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ gitea.server_url }}
|
||||
username: ${{ gitea.actor }}
|
||||
password: ${{ secrets.GITEA }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: |
|
||||
engineering.sanya.gay/pluralflux/pluralflux:latest
|
||||
|
||||
- name: Deploy bot
|
||||
uses: appleboy/ssh-action@v1.0.3
|
||||
with:
|
||||
host: ${{ secrets.SSH_HOST }}
|
||||
username: ${{ secrets.SSH_USER }}
|
||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
port: 22
|
||||
script: |
|
||||
cd ${{ secrets.BOT_DIRECTORY }}
|
||||
docker compose pull
|
||||
docker compose up -d pluralflux-prod
|
||||
26
.gitea/workflows/sync-from-mirror.yaml
Normal file
26
.gitea/workflows/sync-from-mirror.yaml
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Auto-Sync from Mirror
|
||||
on:
|
||||
push:
|
||||
repository: "Pluralflux/Pluralflux"
|
||||
branches: [main,develop]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Fork
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
|
||||
- name: Pull from Mirror
|
||||
run: |
|
||||
git remote add upstream https://engineering.sanya.gay/PluralFlux/PluralFlux.git
|
||||
git fetch upstream --prune
|
||||
git reset --hard origin/main
|
||||
git push origin "refs/remotes/upstream/*:refs/heads/*" --force-with-lease
|
||||
git merge upstream/main -m "Syncing from github"
|
||||
git push origin main
|
||||
@@ -7,8 +7,6 @@ PluralFlux is a proxybot akin to PluralKit and Tupperbox, but for [Fluxer](https
|
||||
|
||||
[Sponsor the project](https://github.com/sponsors/pieartsy)
|
||||
|
||||
If it's not running at the moment, it's because my computer crashed or something. I'm looking to move running it to a somewhat more permanent solution.
|
||||
|
||||
## Commands
|
||||
All commands are prefixed by `pf;`. Currently only a few are implemented.
|
||||
|
||||
|
||||
@@ -22,4 +22,5 @@ services:
|
||||
volumes:
|
||||
- pgadmindata:/var/lib/pgadmin
|
||||
volumes:
|
||||
pgdata:
|
||||
pgdata:
|
||||
pgadmindata:
|
||||
@@ -7,7 +7,7 @@ env.config();
|
||||
|
||||
export const AppDataSource = new DataSource({
|
||||
type: "postgres",
|
||||
host: "localhost",
|
||||
host: process.env.POSTGRES_ENDPOINT,
|
||||
port: 5432,
|
||||
username: "postgres",
|
||||
password: process.env.POSTGRES_PASSWORD,
|
||||
@@ -23,4 +23,4 @@ export const AppDataSource = new DataSource({
|
||||
null: "sql-null",
|
||||
undefined: "throw",
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn} from "typeorm"
|
||||
import {Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, Unique} from "typeorm"
|
||||
|
||||
@Entity({name: "Member", synchronize: true})
|
||||
@Unique("UQ_Member_userid_name", ['userid', 'name'])
|
||||
export class Member {
|
||||
|
||||
@PrimaryGeneratedColumn()
|
||||
|
||||
17
database/migrations/1772825438973-delete-duplicates.ts
Normal file
17
database/migrations/1772825438973-delete-duplicates.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class DeleteDuplicates1772825438973 implements MigrationInterface {
|
||||
name= "DeleteDuplicates1772825438973"
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DELETE
|
||||
FROM "Member" a USING "Member" b
|
||||
WHERE a.id
|
||||
> b.id
|
||||
AND a.name = b.name
|
||||
AND a.userid = b.userid;`)
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
}
|
||||
|
||||
}
|
||||
14
database/migrations/1772830252670-update.ts
Normal file
14
database/migrations/1772830252670-update.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class Update1772830252670 implements MigrationInterface {
|
||||
name = 'Update1772830252670'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "Member" ADD CONSTRAINT "UQ_Member_userid_name" UNIQUE ("userid", "name")`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "Member" DROP CONSTRAINT "UQ_Member_userid_name"`);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -35,7 +35,7 @@
|
||||
"scripts": {
|
||||
"test": "jest",
|
||||
"start": "ts-node src/bot.js",
|
||||
"build-db": "tsc",
|
||||
"new-migration": "typeorm-ts-node-commonjs migration:create database/migrations/update",
|
||||
"generate-db": "typeorm-ts-node-commonjs migration:generate -d database/data-source.ts database/migrations/update",
|
||||
"run-migration": "typeorm-ts-node-commonjs migration:run -d database/data-source.ts"
|
||||
}
|
||||
|
||||
@@ -403,7 +403,7 @@ memberHelper.updateMemberField = async function (authorId, memberName, columnNam
|
||||
/**
|
||||
* Gets the details for a member.
|
||||
*
|
||||
* @param {{Members, string[]}} member - The member object
|
||||
* @param {{Member, string[]}} member - The member object
|
||||
* @returns {EmbedBuilder} The member's info.
|
||||
*/
|
||||
memberHelper.getMemberInfo = function (member) {
|
||||
|
||||
@@ -36,12 +36,7 @@ memberRepo.getMembersByAuthor = async function (authorId) {
|
||||
* @returns {Promise<number>} Number of results removed.
|
||||
*/
|
||||
memberRepo.removeMember = async function (authorId, memberName) {
|
||||
const deleted = await members.delete({
|
||||
where: {
|
||||
name: ILike(memberName),
|
||||
userid: authorId
|
||||
}
|
||||
})
|
||||
const deleted = await members.delete({ name: ILike(memberName), userid: authorId })
|
||||
return deleted.affected;
|
||||
}
|
||||
|
||||
@@ -53,8 +48,8 @@ memberRepo.removeMember = async function (authorId, memberName) {
|
||||
* @returns {Promise<Member>} A successful inserted object.
|
||||
*/
|
||||
memberRepo.createMember = async function (createObj) {
|
||||
return members.insert({
|
||||
name: createObj.name, userid: createObj.authorId, displayname: createObj.displayName, proxy: createObj.proxy, propic: createObj.propic
|
||||
return await members.save({
|
||||
name: createObj.name, userid: createObj.userid, displayname: createObj.displayname, proxy: createObj.proxy, propic: createObj.propic
|
||||
});
|
||||
}
|
||||
|
||||
@@ -69,12 +64,10 @@ memberRepo.createMember = async function (createObj) {
|
||||
* @returns {Promise<number>} A successful update.
|
||||
*/
|
||||
memberRepo.updateMemberField = async function (authorId, memberName, columnName, value) {
|
||||
const updated = await members.update({[columnName]: value}, {
|
||||
where: {
|
||||
name: ILike(memberName),
|
||||
userid: authorId
|
||||
}
|
||||
})
|
||||
const updated = await members.update({
|
||||
name: ILike(memberName),
|
||||
userid: authorId
|
||||
}, {[columnName]: value})
|
||||
return updated.affected;
|
||||
}
|
||||
|
||||
|
||||
7
variables.env
Normal file
7
variables.env
Normal file
@@ -0,0 +1,7 @@
|
||||
FLUXER_BOT_TOKEN=<>
|
||||
POSTGRES_PASSWORD=<>
|
||||
POSTGRES_ENDPOINT=postgres
|
||||
PGADMIN_DEFAULT_EMAIL: <>
|
||||
PGADMIN_DEFAULT_PASSWORD: <>
|
||||
PGADMIN_CONFIG_SERVER_MODE: 'False'
|
||||
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False'
|
||||
Reference in New Issue
Block a user