Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
92a0b61
custom release initialization
psilabs-dev Apr 14, 2025
cb9b216
always show page count
psilabs-dev Dec 1, 2025
82f5568
render summary with HTML
psilabs-dev Aug 15, 2026
c4e06ac
implement category actions
psilabs-dev Jul 8, 2026
6d89225
Search API extension
psilabs-dev Apr 30, 2026
72b2251
copy/paste to /search/composite/ids
psilabs-dev Jun 29, 2026
3b85353
add composite version of get random archives
psilabs-dev Aug 15, 2026
2d3aaf6
refactor SearchClause from OpenAPI.yaml
psilabs-dev Aug 15, 2026
346f833
apply CategoryId schema constraints to SearchClause
psilabs-dev Aug 15, 2026
8c43119
add security field
psilabs-dev Aug 15, 2026
20a0a9c
default sortkey to title
psilabs-dev Aug 16, 2026
4d7dd7f
composite search category constraint optimization
psilabs-dev Aug 16, 2026
60b870a
normalize_clauses fallback to 0 if undef
psilabs-dev Aug 16, 2026
6156b67
fix outstanding description
psilabs-dev Aug 16, 2026
ffe094b
complete PostgreSQL migration
psilabs-dev Dec 8, 2025
c271b18
add postgres flag
psilabs-dev Mar 17, 2026
1d33dcd
refactor for upcoming split
psilabs-dev Mar 19, 2026
d2c0b55
cache tag stats with redis
psilabs-dev Mar 20, 2026
919a63b
purge all redis cache-related logic
psilabs-dev Mar 21, 2026
0144327
remove all Routing.pm comments
psilabs-dev Mar 22, 2026
2e187dc
remove stale TODO comments
psilabs-dev Mar 22, 2026
eaa4cc1
PgSearch: honor hidecompleted parameter (mirror upstream #547)
psilabs-dev Apr 30, 2026
898c173
PgOpds: pass hidecompleted=0 to PgSearch (mirror upstream a3c98b12)
psilabs-dev Apr 30, 2026
61d9feb
Migrate sync-introduced endpoints to Postgres
psilabs-dev Jun 8, 2026
d92d4dd
Api/Search: route handle_api_ids to PgSearch (mirror upstream a5842094)
psilabs-dev Aug 16, 2026
424bba4
PgSearch: restructure into prep/query/facade layers with clause-set core
psilabs-dev Aug 16, 2026
25c2038
address perlcritic
psilabs-dev Aug 23, 2026
83a689e
return the archive hash from get_archive
psilabs-dev Sep 5, 2026
455c22c
extend natural_sort collation to lrr_archive_to_tag_map
psilabs-dev Sep 8, 2026
f842e25
sorting should not be in core
psilabs-dev Sep 12, 2026
8afa5c0
skip duplication when only handling one clause
psilabs-dev Sep 12, 2026
9838439
replace raw selectedCategory set with setter
psilabs-dev Aug 15, 2026
29f9a62
prepare UI for composite migration
psilabs-dev Aug 16, 2026
5b0baae
migrate UI to composite search
psilabs-dev Aug 16, 2026
5a2d08d
remove categories before updating carousel
psilabs-dev Aug 16, 2026
dcf4bc3
handle initialization gracefully for compositeAjax
psilabs-dev Aug 16, 2026
0a82045
centralize search endpoint retry/backoff
psilabs-dev Aug 16, 2026
da5e29e
drop unknown categories from consumeURLParameters
psilabs-dev Aug 16, 2026
cd4b979
Merge dev-sql/main
psilabs-dev Sep 28, 2026
30c8623
Merge pr (Context menu for category actions #1670)
psilabs-dev Sep 28, 2026
f78480a
Merge pr (Search API extension with UI #120)
psilabs-dev Sep 28, 2026
c96ad1a
Adapt category context menu to multi-category selection
psilabs-dev Aug 23, 2026
cad9eb1
Route composite search endpoints to PgSearch
psilabs-dev Aug 16, 2026
07a1316
let tab press apply highlighted suggestion
psilabs-dev Sep 29, 2026
8a1dcd2
Merge pr (let tab press apply highlighted suggestion #1726)
psilabs-dev Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 13 additions & 121 deletions .github/workflows/push-continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ on:
integration_test_ref:
description: 'Integration testing repository git commit hash or branch'
required: true
default: '8f0993203d32045f5f808087065b19d6cd0bef94'
default: 'dev-postgresql/main'

env:
INTEGRATION_TEST_REPOSITORY: ${{ github.event.inputs.integration_test_repository || 'psilabs-dev/aio-lanraragi' }}
INTEGRATION_TEST_REF: ${{ github.event.inputs.integration_test_ref || '8f2fba6cfc5f582e776615359113d9ff37218b3d' }}
INTEGRATION_TEST_REF: ${{ github.event.inputs.integration_test_ref || 'dev-postgresql/main' }}

name: "Continuous Integration \U0001F44C\U0001F440"
jobs:
Expand Down Expand Up @@ -42,12 +42,16 @@ jobs:
with:
file: ./tools/build/docker/Dockerfile
tags: lanraragi:test
build-args: |
INCLUDE_POSTGRESQL=1
outputs: type=docker
cache-from: type=gha,scope=buildkit-linux-amd64
- name: Copy tests
run: cp -R tests .github/action-run-tests
- name: LANraragi Test Suite
uses: ./.github/action-run-tests
env:
INCLUDE_POSTGRESQL: 1
- name: Perl Critic
uses: Difegue/action-perlcritic@master
env:
Expand All @@ -72,6 +76,8 @@ jobs:
context: lanraragi
file: lanraragi/tools/build/docker/Dockerfile
tags: lanraragi:ci
build-args: |
INCLUDE_POSTGRESQL=1
outputs: type=docker,dest=${{ runner.temp }}/lanraragi-ci.tar
cache-from: type=gha,scope=buildkit-linux-amd64
- name: Load LRR Docker image
Expand Down Expand Up @@ -108,7 +114,9 @@ jobs:
--cache-backend valkey \
--playwright \
--no-rate-limit \
--npseed 42
--postgres \
--npseed 42 \
-k "not test_double_page_navigation and not test_handler_resource_management"
env:
DOCKER_HOST: unix:///var/run/docker.sock
- name: Upload server logs
Expand All @@ -119,121 +127,5 @@ jobs:
path: ${{ github.workspace }}/server-logs/
retention-days: 14

integrationTestsWindows:
name: Run Windows Integration Tests
runs-on: windows-2025
needs: testSuite
steps:
- name: Checkout LANraragi repository
uses: actions/checkout@v6
with:
path: lanraragi
- name: Compute windist cache key
id: windist-key
run: |
$toolsHash = git -C "$env:GITHUB_WORKSPACE\lanraragi" rev-parse HEAD:tools
"key=windist-${{ runner.os }}-$toolsHash" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
- name: Restore windist cache
id: cache-windist
uses: actions/cache/restore@v5
with:
path: ${{ github.workspace }}\windist\win-dist.zip
key: ${{ steps.windist-key.outputs.key }}
- name: Unzip windist from cache
if: steps.cache-windist.outputs.cache-hit == 'true'
run: |
$dest = Join-Path $env:GITHUB_WORKSPACE "LANraragi\win-dist"
New-Item -ItemType Directory -Path $dest -Force | Out-Null
$zip = Join-Path $env:GITHUB_WORKSPACE "windist\win-dist.zip"
Expand-Archive -Path $zip -DestinationPath $dest -Force
- name: Setup MSYS2 UCRT64
if: steps.cache-windist.outputs.cache-hit != 'true'
uses: msys2/setup-msys2@v2
with:
msystem: UCRT64
update: true
cache: false
- name: Install deps
if: steps.cache-windist.outputs.cache-hit != 'true'
shell: msys2 {0}
working-directory: LANraragi
run: |
./tools/build/windows/install-deps.sh
- name: Build
if: steps.cache-windist.outputs.cache-hit != 'true'
shell: msys2 {0}
working-directory: LANraragi
run: |
./tools/build/windows/install.sh
./tools/build/windows/cleanup.sh
./tools/build/windows/create-dist.sh
- name: Enable UTF-8
if: steps.cache-windist.outputs.cache-hit != 'true'
working-directory: LANraragi
run: |
./tools/build/windows/utf8-support.ps1
- name: Create windist zip for cache
if: steps.cache-windist.outputs.cache-hit != 'true'
run: |
$src = Join-Path $env:GITHUB_WORKSPACE "LANraragi\win-dist"
$dstDir = Join-Path $env:GITHUB_WORKSPACE "windist"
New-Item -ItemType Directory -Path $dstDir -Force | Out-Null
$zip = Join-Path $dstDir "win-dist.zip"
Compress-Archive -Path (Join-Path $src '*') -DestinationPath $zip
- name: Save windist cache
if: steps.cache-windist.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: ${{ github.workspace }}\windist\win-dist.zip
key: ${{ steps.windist-key.outputs.key }}
- name: Copy app code to windist
shell: bash
working-directory: LANraragi
run: |
cp ./package.json ./win-dist
cp ./lrr.conf ./win-dist
cp -R ./lib ./win-dist
cp -R ./public ./win-dist
cp -R ./script ./win-dist
cp -R ./templates ./win-dist
cp -R ./locales ./win-dist
- name: Checkout aio-lanraragi integration tests
uses: actions/checkout@v6
with:
repository: ${{ env.INTEGRATION_TEST_REPOSITORY }}
ref: ${{ env.INTEGRATION_TEST_REF }}
path: aio-lanraragi
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Set up uv
uses: astral-sh/setup-uv@v7
- name: Install workspace packages
working-directory: aio-lanraragi
run: |
uv sync --all-packages
uv run playwright install
- name: Create staging directory
run: |
New-Item -ItemType Directory -Path "$env:GITHUB_WORKSPACE\staging" -Force | Out-Null
- name: Run integration tests against local LANraragi build
working-directory: aio-lanraragi/integration_tests
timeout-minutes: 100
run: |
$env:CI='true'
uv run pytest tests `
--log-cli-level=INFO `
--windist "$env:GITHUB_WORKSPACE\LANraragi\win-dist" `
--staging "$env:GITHUB_WORKSPACE\staging" `
--server-logs "$env:GITHUB_WORKSPACE\server-logs" `
--playwright `
--no-rate-limit `
--npseed 42
- name: Upload server logs
if: failure()
uses: actions/upload-artifact@v7
with:
name: server-logs-windows
path: ${{ github.workspace }}\server-logs\
retention-days: 14
# Windows integration tests disabled — no PostgreSQL support on Windows.
# See upstream integrationTestsWindows job for reference.
4 changes: 4 additions & 0 deletions CUSTOM.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# custom release

- always show page count
- render summary with HTML
14 changes: 13 additions & 1 deletion lib/LANraragi.pm
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@ use LANraragi::Model::Config;
use LANraragi::Model::Plugins;
use LANraragi::Model::Registry;
use LANraragi::Model::Server;
use LANraragi::Model::Setup qw(first_install_actions);
use LANraragi::Model::PsilabsDev::PgSetup qw(first_install_actions);
use LANraragi::Model::Metrics;

use LANraragi::Utils::PsilabsDev::Database;

use constant IS_UNIX => ( $Config{osname} ne 'MSWin32' );

# This method will run once at server start
Expand Down Expand Up @@ -120,6 +122,16 @@ sub startup {
# Initialize cache
LANraragi::Utils::PageCache::initialize();

# Initialize database schema
eval {
LANraragi::Utils::PsilabsDev::Database::initialize();
$self->LRR_LOGGER->info("Initialized database schema.");
} or do {
my $error = $@;
$self->LRR_LOGGER->error("Failed to initialize database schema: $error");
die "Failed to initialize database schema: $error";
};

# Load i18n
LANraragi::Utils::I18NInitializer::initialize($self);

Expand Down
Loading
Loading