refactor(repo): consolidate openflare-server to root and move subprojects to internal/apps

- Merge all files inside openflare-server to the repository root directory.
- Relocate agent, relay, and flared subprojects from internal/ to internal/apps/.
- Combine docker-compose files and update build context paths to root.
- Update GitHub workflows and Dockerfiles to refer to new directories and package names.
- Rewrite Go package imports across all files.
- Resolve database renew test race condition and clean up docs.
This commit is contained in:
ryan
2026-06-19 14:23:29 +08:00
parent 19d476ed7f
commit 63cd906cfc
1064 changed files with 366 additions and 1397 deletions
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
# execute this first
# go install github.com/swaggo/swag/cmd/swag@latest
swag init -o docs --parseDependency --parseInternal --exclude fast-note-sync-service-source
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
set -ex
go mod tidy
+44
View File
@@ -0,0 +1,44 @@
import os
import sys
from deep_translator import GoogleTranslator
def main():
# Get message from environment variable or command line argument
msg = os.environ.get('COMMIT_MSG', '')
if len(sys.argv) > 1:
msg = sys.argv[1]
if not msg:
print("No commit message found.")
return
# Use a single instance of translators to potentially benefit from some caching if it exists
translator_zh = GoogleTranslator(source='auto', target='zh-CN')
translator_en = GoogleTranslator(source='auto', target='en')
lines = msg.split('\n')
for line in lines:
# Extract leading whitespace (indentation)
indent = line[:len(line) - len(line.lstrip())]
content = line.strip()
if not content:
print(line) # Preserve empty lines or lines with only spaces
continue
try:
# Translate only the content to avoid translator messing with indentation
zh_trans = translator_zh.translate(content)
en_trans = translator_en.translate(content)
# Re-apply indentation to both translations
print(f"{indent}{zh_trans}")
print(f"{indent}{en_trans}")
except Exception as e:
# If translation fails, print original line (which contains indentation)
print(f"{line}")
if __name__ == "__main__":
main()
+174
View File
@@ -0,0 +1,174 @@
#!/usr/bin/env bash
set -euo pipefail
MODE="write"
usage() {
cat <<'EOF'
Usage:
scripts/update_go_license.sh [--check]
Updates Go source files with the project SPDX license header.
Rules:
- Files already carrying a correct SPDX header are left untouched.
- Legacy block-comment (/* ... */) Apache headers are converted to
the short SPDX form, preserving copyright attribution.
- Go files without any license header receive:
// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
- //go:build and legacy // +build constraints stay at the top.
Options:
--check Report files that would change and exit non-zero if any are found.
EOF
}
while (($#)); do
case "$1" in
--check)
MODE="check"
;;
-h|--help)
usage
exit 0
;;
*)
echo "unknown argument: $1" >&2
usage >&2
exit 2
;;
esac
shift
done
tmp_dir="$(mktemp -d)"
trap 'rm -rf "$tmp_dir"' EXIT
changed=0
find_go_files() {
find . \
\( -path './.*' \
-o -path './*-source' \
-o -path './docs' \
-o -path './frontend/node_modules' \
-o -path './frontend/.next' \
-o -path './frontend/out' \
-o -path './internal/router/dist' \
-o -path './internal/router/root/dist' \
-o -path './vendor' \) -prune \
-o -type f -name '*.go' -print
}
process_file() {
local file="$1"
local out="$2"
perl -0 - "$file" "$out" <<'PERL'
use strict;
use warnings;
my ($file, $out) = @ARGV;
open my $in, '<', $file or die "open $file: $!";
local $/;
my $src = <$in>;
close $in;
my $new_only_header =
"// Copyright 2026 Arctel.net\n" .
"// SPDX-License-Identifier: Apache-2.0";
my $modified_header =
"// Copyright 2025 linux.do\n" .
"// Copyright 2026 Arctel.net\n" .
"// SPDX-License-Identifier: Apache-2.0";
my @lines = split /\n/, $src, -1;
my @prefix;
my $i = 0;
# Preserve //go:build and // +build constraint lines at the top.
if (@lines && ($lines[0] =~ m{^//go:build } || $lines[0] =~ m{^// \+build })) {
while ($i < @lines) {
if ($lines[$i] =~ m{^//go:build } || $lines[$i] =~ m{^// \+build }) {
push @prefix, $lines[$i++];
next;
}
if ($lines[$i] eq '') {
push @prefix, $lines[$i++];
last if $i >= @lines || ($lines[$i] !~ m{^//go:build } && $lines[$i] !~ m{^// \+build });
next;
}
last;
}
}
my $prefix = @prefix ? join("\n", @prefix) . "\n" : '';
my $body = join "\n", @lines[$i .. $#lines];
my $result;
# --- Case 1: already has SPDX header (correct format, leave untouched) ---
if ($body =~ m{\A(// Copyright [^\x0a]+\x0a(?:// Copyright [^\x0a]+\x0a)?// SPDX-License-Identifier: Apache-2\.0)(\x0a?)}s) {
$result = $prefix . $body;
}
# --- Case 2: legacy block-comment header (/* ... */) ---
elsif ($body =~ m{\A(/\*.*?\*/)(\n*)}s) {
my $block = $1;
my $rest = substr($body, length($1) + length($2));
$rest =~ s/\A\n+//;
if ($block =~ /Licensed under the Apache License/ && $block =~ /Copyright /) {
my $has_linux_do = ($block =~ /Copyright [^\n]*linux\.do/);
my $has_arctel = ($block =~ /Copyright [^\n]*Arctel\.net/);
my $has_modified = ($block =~ /Modified by Arctel\.net/);
if ($has_linux_do && ($has_arctel || $has_modified)) {
$result = $prefix . $modified_header . "\n\n" . $rest;
} elsif ($has_arctel && !$has_linux_do) {
$result = $prefix . $new_only_header . "\n\n" . $rest;
} elsif ($has_linux_do && !$has_arctel && !$has_modified) {
my $h = "// Copyright 2025 linux.do\n" .
"// SPDX-License-Identifier: Apache-2.0";
$result = $prefix . $h . "\n\n" . $rest;
} else {
$result = $prefix . $new_only_header . "\n\n" . $rest;
}
} else {
# Non-Apache block comment — prepend new header.
$result = $prefix . $new_only_header . "\n\n" . $block . "\n\n" . $rest;
}
}
# --- Case 3: no header at all ---
else {
$body =~ s/\A\n+//;
$result = $prefix . $new_only_header . "\n\n" . $body;
}
open my $fh, '>', $out or die "write $out: $!";
print {$fh} $result;
close $fh;
PERL
}
while IFS= read -r file; do
tmp_file="$tmp_dir/${file#./}"
mkdir -p "$(dirname "$tmp_file")"
process_file "$file" "$tmp_file"
if ! cmp -s "$file" "$tmp_file"; then
changed=1
if [[ "$MODE" == "check" ]]; then
echo "needs license update: $file"
else
cp "$tmp_file" "$file"
echo "updated: $file"
fi
fi
done < <(find_go_files)
if [[ "$MODE" == "check" && "$changed" -ne 0 ]]; then
exit 1
fi