ci: attempt to add a CI task for merge requests
This commit is contained in:
parent
4e83dbd01f
commit
e797849e9b
2 changed files with 113 additions and 188 deletions
192
.config/ci.yml
192
.config/ci.yml
|
@ -1,195 +1,11 @@
|
||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
url: http://localhost:3000
|
||||||
# Firefish configuration
|
|
||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
||||||
|
|
||||||
# ┌─────┐
|
|
||||||
#───┘ URL └─────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
# Final accessible URL seen by a user.
|
|
||||||
url: https://example.tld/
|
|
||||||
|
|
||||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
|
||||||
# URL SETTINGS AFTER THAT!
|
|
||||||
|
|
||||||
# ┌───────────────────────┐
|
|
||||||
#───┘ Port and TLS settings └───────────────────────────────────
|
|
||||||
|
|
||||||
#
|
|
||||||
# Misskey requires a reverse proxy to support HTTPS connections.
|
|
||||||
#
|
|
||||||
# +----- https://example.tld/ ------------+
|
|
||||||
# +------+ |+-------------+ +----------------+|
|
|
||||||
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
|
|
||||||
# +------+ |+-------------+ +----------------+|
|
|
||||||
# +---------------------------------------+
|
|
||||||
#
|
|
||||||
# You need to set up a reverse proxy. (e.g. nginx)
|
|
||||||
# An encrypted connection with HTTPS is highly recommended
|
|
||||||
# because tokens may be transferred in GET requests.
|
|
||||||
|
|
||||||
# The port that your Misskey server should listen on.
|
|
||||||
port: 3000
|
port: 3000
|
||||||
|
|
||||||
# ┌──────────────────────────┐
|
|
||||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
|
||||||
|
|
||||||
db:
|
db:
|
||||||
host: postgres
|
host: postgres
|
||||||
port: 5432
|
port: 5432
|
||||||
|
db: firefish_db
|
||||||
# Database name
|
user: firefish
|
||||||
db: postgres
|
pass: password
|
||||||
|
|
||||||
# Auth
|
|
||||||
user: postgres
|
|
||||||
pass: test
|
|
||||||
|
|
||||||
# Whether disable Caching queries
|
|
||||||
#disableCache: true
|
|
||||||
|
|
||||||
# Extra Connection options
|
|
||||||
#extra:
|
|
||||||
# ssl: true
|
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
|
||||||
#───┘ Redis configuration └─────────────────────────────────────
|
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
host: redis
|
host: redis
|
||||||
port: 6379
|
port: 6379
|
||||||
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
|
||||||
#pass: example-pass
|
|
||||||
#prefix: example-prefix
|
|
||||||
#db: 1
|
|
||||||
|
|
||||||
# ┌─────────────────────────────┐
|
|
||||||
#───┘ Elasticsearch configuration └─────────────────────────────
|
|
||||||
|
|
||||||
#elasticsearch:
|
|
||||||
# host: localhost
|
|
||||||
# port: 9200
|
|
||||||
# ssl: false
|
|
||||||
# user:
|
|
||||||
# pass:
|
|
||||||
|
|
||||||
# ┌───────────────┐
|
|
||||||
#───┘ ID generation └───────────────────────────────────────────
|
|
||||||
|
|
||||||
# You can select the ID generation method.
|
|
||||||
# You don't usually need to change this setting, but you can
|
|
||||||
# change it according to your preferences.
|
|
||||||
|
|
||||||
# Available methods:
|
|
||||||
# aid ... Short, Millisecond accuracy
|
|
||||||
# meid ... Similar to ObjectID, Millisecond accuracy
|
|
||||||
# ulid ... Millisecond accuracy
|
|
||||||
# objectid ... This is left for backward compatibility
|
|
||||||
|
|
||||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
|
||||||
# ID SETTINGS AFTER THAT!
|
|
||||||
|
|
||||||
id: 'aid'
|
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
|
||||||
#───┘ Other configuration └─────────────────────────────────────
|
|
||||||
|
|
||||||
# Max note length, should be < 8000.
|
|
||||||
#maxNoteLength: 3000
|
|
||||||
|
|
||||||
# Whether disable HSTS
|
|
||||||
#disableHsts: true
|
|
||||||
|
|
||||||
# Number of worker processes
|
|
||||||
#clusterLimit: 1
|
|
||||||
|
|
||||||
# Job concurrency per worker
|
|
||||||
# deliverJobConcurrency: 128
|
|
||||||
# inboxJobConcurrency: 16
|
|
||||||
|
|
||||||
# Job rate limiter
|
|
||||||
# deliverJobPerSec: 128
|
|
||||||
# inboxJobPerSec: 16
|
|
||||||
|
|
||||||
# Job attempts
|
|
||||||
# deliverJobMaxAttempts: 12
|
|
||||||
# inboxJobMaxAttempts: 8
|
|
||||||
|
|
||||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
|
||||||
#outgoingAddressFamily: ipv4
|
|
||||||
|
|
||||||
# Syslog option
|
|
||||||
#syslog:
|
|
||||||
# host: localhost
|
|
||||||
# port: 514
|
|
||||||
|
|
||||||
# Proxy for HTTP/HTTPS
|
|
||||||
#proxy: http://127.0.0.1:3128
|
|
||||||
|
|
||||||
#proxyBypassHosts: [
|
|
||||||
# 'example.com',
|
|
||||||
# '192.0.2.8'
|
|
||||||
#]
|
|
||||||
|
|
||||||
# Proxy for SMTP/SMTPS
|
|
||||||
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
|
|
||||||
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
|
|
||||||
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
|
|
||||||
|
|
||||||
# Media Proxy
|
|
||||||
#mediaProxy: https://example.com/proxy
|
|
||||||
|
|
||||||
# Proxy remote files (default: false)
|
|
||||||
#proxyRemoteFiles: true
|
|
||||||
|
|
||||||
#allowedPrivateNetworks: [
|
|
||||||
# '127.0.0.1/32'
|
|
||||||
#]
|
|
||||||
|
|
||||||
# Upload or download file size limits (bytes)
|
|
||||||
#maxFileSize: 262144000
|
|
||||||
|
|
||||||
# Managed hosting settings
|
|
||||||
# !!!!!!!!!!
|
|
||||||
# >>>>>> NORMAL SELF-HOSTERS, STAY AWAY! <<<<<<
|
|
||||||
# >>>>>> YOU DON'T NEED THIS! <<<<<<
|
|
||||||
# !!!!!!!!!!
|
|
||||||
# Each category is optional, but if each item in each category is mandatory!
|
|
||||||
# If you mess this up, that's on you, you've been warned...
|
|
||||||
|
|
||||||
#maxUserSignups: 100
|
|
||||||
#isManagedHosting: true
|
|
||||||
#deepl:
|
|
||||||
# managed: true
|
|
||||||
# authKey: ''
|
|
||||||
# isPro: false
|
|
||||||
#
|
|
||||||
#email:
|
|
||||||
# managed: true
|
|
||||||
# address: 'example@email.com'
|
|
||||||
# host: 'email.com'
|
|
||||||
# port: 587
|
|
||||||
# user: 'example@email.com'
|
|
||||||
# pass: ''
|
|
||||||
# useImplicitSslTls: false
|
|
||||||
#
|
|
||||||
#objectStorage:
|
|
||||||
# managed: true
|
|
||||||
# baseUrl: ''
|
|
||||||
# bucket: ''
|
|
||||||
# prefix: ''
|
|
||||||
# endpoint: ''
|
|
||||||
# region: ''
|
|
||||||
# accessKey: ''
|
|
||||||
# secretKey: ''
|
|
||||||
# useSsl: true
|
|
||||||
# connnectOverProxy: false
|
|
||||||
# setPublicReadOnUpload: true
|
|
||||||
# s3ForcePathStyle: true
|
|
||||||
|
|
||||||
# !!!!!!!!!!
|
|
||||||
# >>>>>> AGAIN, NORMAL SELF-HOSTERS, STAY AWAY! <<<<<<
|
|
||||||
# >>>>>> YOU DON'T NEED THIS, ABOVE SETTINGS ARE FOR MANAGED HOSTING ONLY! <<<<<<
|
|
||||||
# !!!!!!!!!!
|
|
||||||
|
|
||||||
# Seriously. Do NOT fill out the above settings if you're self-hosting.
|
|
||||||
# They're much better off being set from the control panel.
|
|
||||||
|
|
109
.gitlab-ci.yml
Normal file
109
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
image: docker.io/node:alpine-16
|
||||||
|
|
||||||
|
services:
|
||||||
|
- docker.io/groonga/pgroonga:latest-alpine-12-slim
|
||||||
|
- docker.io/redis:7-alpine
|
||||||
|
|
||||||
|
workflow:
|
||||||
|
rules:
|
||||||
|
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||||
|
when: always
|
||||||
|
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'main'
|
||||||
|
when: never
|
||||||
|
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- node_modules/
|
||||||
|
- target/
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- auto_update
|
||||||
|
|
||||||
|
variables:
|
||||||
|
POSTGRES_DB: firefish_db
|
||||||
|
POSTGRES_USER: firefish
|
||||||
|
POSTGRES_PASSWORD: password
|
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
|
||||||
|
default:
|
||||||
|
before_script:
|
||||||
|
- apk add build-base linux-headers curl ca-certificates python3 perl
|
||||||
|
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||||
|
- . "${HOME}/.cargo/env"
|
||||||
|
- corepack enable
|
||||||
|
- corepack prepare pnpm@latest --activate
|
||||||
|
- cp .config/ci.yml .config/default.yml
|
||||||
|
- export PGPASSWORD="${POSTGRES_PASSWORD}"
|
||||||
|
- psql --host postgres --user "${POSTGRES_USER}" --dbname "${POSTGRES_DB}" --command 'CREATE EXTENSION pgroonga'
|
||||||
|
|
||||||
|
auto_update:
|
||||||
|
stage: auto_update
|
||||||
|
script:
|
||||||
|
# setup git
|
||||||
|
- apk add git
|
||||||
|
- git config user.name "${GITLAB_USER_NAME}"
|
||||||
|
- git config user.email "${GITLAB_USER_EMAIL}"
|
||||||
|
- git remote set-url origin "${CI_MERGE_REQUEST_SOURCE_PROJECT_URL}"
|
||||||
|
- git fetch origin
|
||||||
|
- git switch "${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"
|
||||||
|
# update pnpm lockfile
|
||||||
|
- pnpm install
|
||||||
|
# commit
|
||||||
|
- |-
|
||||||
|
if [ `git status -s | wc -l` -gt 0 ]; then
|
||||||
|
git add .
|
||||||
|
git commit --message 'chore: update lockfile'
|
||||||
|
git push --push-option=ci.skip origin "${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"
|
||||||
|
fi
|
||||||
|
# run format
|
||||||
|
- pnpm run format
|
||||||
|
# commit
|
||||||
|
- |-
|
||||||
|
if [ `git status -s | wc -l` -gt 0 ]; then
|
||||||
|
git add .
|
||||||
|
git commit --message 'chore: format'
|
||||||
|
git push --push-option=ci.skip origin "${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"
|
||||||
|
fi
|
||||||
|
# update packages/backend-rs/src/model/entity
|
||||||
|
- cargo install sea-orm-cli
|
||||||
|
- pnpm --filter backend run build:debug
|
||||||
|
- pnpm run migrate
|
||||||
|
- cd packages/backend-rs
|
||||||
|
- mv src/model/entity src/model/entity.bak
|
||||||
|
- |-
|
||||||
|
sea-orm-cli generate entity \
|
||||||
|
--output-dir='src/model/entity' \
|
||||||
|
--date-time-crate='chrono' \
|
||||||
|
--model-extra-attributes='NAPI_EXTRA_ATTR_PLACEHOLDER' \
|
||||||
|
--database-url="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}"
|
||||||
|
- |-
|
||||||
|
for file in src/model/entity/*; do
|
||||||
|
base=$(basename -- "${file}")
|
||||||
|
jsname=$(printf '%s\n' "${base%.*}" | perl -pe 's/(^|_)./uc($&)/ge;s/_//g')
|
||||||
|
attribute=$(printf 'cfg_attr(feature = "napi", napi_derive::napi(object, js_name = "%s", use_nullable = true))' "${jsname}")
|
||||||
|
sed -i "s/NAPI_EXTRA_ATTR_PLACEHOLDER/${attribute}/" "${file}"
|
||||||
|
sed -i 's/#\[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)\]/#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, serde::Serialize, serde::Deserialize)]\n#[serde(rename_all = "camelCase")]/' "${file}"
|
||||||
|
done
|
||||||
|
- |-
|
||||||
|
sed -i 's/#\[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)\]/#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, serde::Serialize, serde::Deserialize)]\n#[serde(rename_all = "camelCase")]\n#[cfg_attr(not(feature = "napi"), derive(Clone))]\n#[cfg_attr(feature = "napi", napi_derive::napi(string_enum = "camelCase"))]/' \
|
||||||
|
src/model/entity/sea_orm_active_enums.rs
|
||||||
|
- rm --recursive --force src/model/entity.bak
|
||||||
|
- cargo fmt --all --
|
||||||
|
# commit
|
||||||
|
- |-
|
||||||
|
if [ `git status -s | wc -l` -gt 0 ]; then
|
||||||
|
git add .
|
||||||
|
git commit --message 'chore (backend-rs): regenerate entity'
|
||||||
|
git push --push-option=ci.skip origin "${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"
|
||||||
|
fi
|
||||||
|
# update packages/backend-rs/index.{js,d.ts}
|
||||||
|
- pnpm run build:debug
|
||||||
|
- /bin/cp --force built/index.js index.js
|
||||||
|
- /bin/cp --force built/index.d.ts index.d.ts
|
||||||
|
- sed -i 's/^ \*r"/ */g' index.d.ts
|
||||||
|
- |-
|
||||||
|
if [ `git status -s | wc -l` -gt 0 ]; then
|
||||||
|
git add .
|
||||||
|
git commit --message 'chore (backend-rs): regenerate index'
|
||||||
|
git push --push-option=ci.skip origin "${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"
|
||||||
|
fi
|
Loading…
Reference in a new issue