Skip to content
Merged
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
ebe4a00
enh: add exapps info endpoint for HaRP
kyteinsky Feb 7, 2025
6604b9e
get metadata for only one ex-app
kyteinsky Feb 7, 2025
4b38bc2
add bruteforce throttler
kyteinsky Feb 7, 2025
e409bdb
enh: add user info endpoint for HaRP
kyteinsky Feb 10, 2025
c3c2cd5
enh: add user info endpoint for HaRP
kyteinsky Feb 12, 2025
0ae2f24
fixes
kyteinsky Feb 13, 2025
8b8dc22
adjustments
kyteinsky Feb 13, 2025
5884ab7
occ: make daemon commands harp combatible
kyteinsky Feb 14, 2025
f21b930
connect to internal dsp of harp if present
kyteinsky Feb 14, 2025
15881ab
ex-app harp specific env set
kyteinsky Feb 14, 2025
8618103
update exapp cache in harp
kyteinsky Feb 21, 2025
fdeae77
frp cert copy from harp to exapp
kyteinsky Feb 21, 2025
28127f3
ui: add harp daemon config
kyteinsky Feb 24, 2025
88d3567
move haproxy password out of foldable
kyteinsky Feb 24, 2025
3ede37f
change harp deploy config structure
kyteinsky Feb 24, 2025
ebab47d
use harp shared key from daemon config
kyteinsky Feb 25, 2025
9608349
wip: improvements to daemon registration modal
kyteinsky Feb 25, 2025
f3c1b5c
ui second draft
kyteinsky Feb 27, 2025
e9516ca
final fixes
kyteinsky Feb 27, 2025
db1c359
little ui changes
kyteinsky Feb 28, 2025
4c5b308
connect to exapps through harp
kyteinsky Feb 28, 2025
dde05a0
compiled assets
kyteinsky Feb 28, 2025
6ab9a36
psalm fixes
kyteinsky Feb 28, 2025
4d55d0a
exapp always binds to localhost for harp
kyteinsky Feb 28, 2025
f6fcd8a
fix register daemon isHarp option
kyteinsky Feb 28, 2025
bb91d7d
remove https checkbox + change def shared key
kyteinsky Mar 3, 2025
0f0fc11
update daemon reg command help
kyteinsky Mar 3, 2025
b6de419
chore(assets): Recompile assets
nextcloud-command Mar 6, 2025
bb25682
ci: harp deploy tests
kyteinsky Mar 5, 2025
ea8a83c
Merge branch 'main' into enh/harp/exapp-info-endpoint
kyteinsky Mar 6, 2025
57d26dc
fix reuse
kyteinsky Mar 6, 2025
f406fe4
ci: fix harp deploy tests
kyteinsky Mar 6, 2025
7bfd140
test
kyteinsky Mar 6, 2025
d7b9ede
REMOVE L8R: faster test iteration
kyteinsky Mar 6, 2025
8020ecf
fast fix ci
kyteinsky Mar 6, 2025
058dd67
debug ci
oleksandr-nc Mar 6, 2025
9bca87c
fix: remove suffix /index.php from exapp url
kyteinsky Mar 6, 2025
402dcd3
ci fix
kyteinsky Mar 6, 2025
8d8db26
add resolver in nginx conf
kyteinsky Mar 6, 2025
fee9809
add other two tests
kyteinsky Mar 6, 2025
a937d91
Revert "REMOVE L8R: faster test iteration"
kyteinsky Mar 6, 2025
aa325fd
require harp tests
kyteinsky Mar 6, 2025
53fcce3
allow manual-install to use harp
kyteinsky Mar 21, 2025
02b4486
fix: early error in appinfo json parsing
kyteinsky Mar 24, 2025
46371dc
use deploy config from exapp instead of daemon config
kyteinsky Mar 24, 2025
2f6fc74
ci: manual harp deploy test
kyteinsky Mar 24, 2025
c2a6430
chore(assets): Recompile assets
nextcloud-command Mar 25, 2025
d8adb83
feat: default daemon setup checks
kyteinsky Mar 25, 2025
39239d0
fix enable harp toggle
kyteinsky Mar 27, 2025
9ef202f
edit deploy daemon and manual-install fixes
kyteinsky Mar 27, 2025
4e64578
chore(assets): Recompile assets
nextcloud-command Mar 27, 2025
bfb3d3d
do not fetch exapp twice for apps metadata
kyteinsky Mar 31, 2025
272c54b
Merge branch 'main' into enh/harp/exapp-info-endpoint
oleksandr-nc Apr 1, 2025
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
303 changes: 302 additions & 1 deletion .github/workflows/tests-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -984,12 +984,313 @@ jobs:
path: data/nextcloud.log
if-no-files-found: warn

nc-docker-harp-bridge:
runs-on: ubuntu-22.04
name: NC In Julius Docker (HaRP-Bridge network)
env:
docker-image: ghcr.io/juliusknorr/nextcloud-dev-php83:master

steps:
- name: Set app env
run: echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

- name: Checkout AppAPI
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3

- name: Create containers
run: |
docker network create master_bridge
docker run \
-e HP_SHARED_KEY="some_very_secure_password" \
-e NC_INSTANCE_URL="http://nextcloud" \
-e HP_LOG_LEVEL="debug" \
-v /var/run/docker.sock:/var/run/docker.sock \
--net master_bridge --name appapi-harp -h appapi-harp \
--restart unless-stopped \
-d ghcr.io/nextcloud/nextcloud-appapi-harp:latest
docker run --net master_bridge --name nextcloud-docker --rm -d ${{ env.docker-image }}

sed -i 's/127\.0\.0\.1:8080/nextcloud-docker/' tests/simple-nginx-NOT-FOR-PRODUCTION.conf
sed -i 's/127\.0\.0\.1:8780/appapi-harp:8780/' tests/simple-nginx-NOT-FOR-PRODUCTION.conf
cat tests/simple-nginx-NOT-FOR-PRODUCTION.conf

docker run --net master_bridge --name nextcloud --rm \
-v $(pwd)/tests/simple-nginx-NOT-FOR-PRODUCTION.conf:/etc/nginx/conf.d/default.conf:ro \
-d nginx

- name: Install AppAPI
run: |
sleep 60s
docker exec -w /var/www/html/apps nextcloud-docker git clone https://github.com/nextcloud/${{ env.APP_NAME }}.git
docker exec -w /var/www/html/apps/${{ env.APP_NAME }} nextcloud-docker git fetch origin $GITHUB_REF
docker exec -w /var/www/html/apps/${{ env.APP_NAME }} nextcloud-docker git checkout FETCH_HEAD
docker exec nextcloud-docker sudo -u www-data php occ app:enable app_api
docker exec nextcloud-docker sudo -u www-data php occ app_api:daemon:register \
harp_proxy "Harp Proxy with DSP" "docker-install" "http" "appapi-harp:8780" "http://nextcloud" \
--harp --harp_frp_address "appapi-harp:8782" --harp_shared_key "some_very_secure_password" \
--net=master_bridge --set-default
docker exec nextcloud-docker sudo -u www-data php occ app_api:daemon:list
docker exec nextcloud-docker ping -c 1 appapi-harp
docker exec nextcloud-docker ping -c 1 nextcloud

- name: Registering and enabling Skeleton ExApp
run: |
docker exec nextcloud-docker sudo -u www-data php occ app_api:app:register app-skeleton-python harp_proxy \
--info-xml https://raw.githubusercontent.com/nextcloud/app-skeleton-python/main/appinfo/info.xml \
--wait-finish

- name: Docker inspect output
if: always()
run: docker inspect nc_app_app-skeleton-python

- name: Disable ExApp
run: |
docker exec nextcloud-docker sudo -u www-data php occ app_api:app:disable app-skeleton-python

- name: Copy NC log to host
if: always()
run: docker cp nextcloud-docker:/var/www/html/data/nextcloud.log nextcloud.log

- name: Check logs
run: |
grep -q 'Hello from app-skeleton-python :)' nextcloud.log || error
grep -q 'Bye bye from app-skeleton-python :(' nextcloud.log || error

- name: Save app and HaRP container info & logs
if: always()
run: |
docker inspect appapi-harp | json_pp > harp_bridge_container.json
docker logs appapi-harp > harp_bridge_container.log 2>&1
docker inspect nc_app_app-skeleton-python | json_pp > app_harp_bridge_container.json
docker logs nc_app_app-skeleton-python > app_harp_bridge_container.log 2>&1
# nginx
docker logs nextcloud > nginx.log 2>&1

- name: Unregister Skeleton & Daemon
run: |
docker exec nextcloud-docker sudo -u www-data php occ app_api:app:unregister app-skeleton-python
docker exec nextcloud-docker sudo -u www-data php occ app_api:daemon:unregister harp_proxy

- name: Show all logs
if: always()
run: tail -v -n +1 *container.json *.log

nc-docker-harp-bridge-no-tls:
runs-on: ubuntu-22.04
name: NC In Julius Docker (HaRP-Bridge network-no FRP TLS)
env:
docker-image: ghcr.io/juliusknorr/nextcloud-dev-php83:master

steps:
- name: Set app env
run: echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

- name: Checkout AppAPI
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3

- name: Create containers
run: |
docker network create master_bridge
docker run \
-e HP_SHARED_KEY="some_very_secure_password" \
-e HP_FRP_DISABLE_TLS="true" \
-e NC_INSTANCE_URL="http://nextcloud" \
-e HP_LOG_LEVEL="debug" \
-v /var/run/docker.sock:/var/run/docker.sock \
--net master_bridge --name appapi-harp -h appapi-harp \
--restart unless-stopped \
-d ghcr.io/nextcloud/nextcloud-appapi-harp:latest
docker run --net master_bridge --name nextcloud-docker --rm -d ${{ env.docker-image }}

sed -i 's/127\.0\.0\.1:8080/nextcloud-docker/' tests/simple-nginx-NOT-FOR-PRODUCTION.conf
sed -i 's/127\.0\.0\.1:8780/appapi-harp:8780/' tests/simple-nginx-NOT-FOR-PRODUCTION.conf
cat tests/simple-nginx-NOT-FOR-PRODUCTION.conf

docker run --net master_bridge --name nextcloud --rm \
-v $(pwd)/tests/simple-nginx-NOT-FOR-PRODUCTION.conf:/etc/nginx/conf.d/default.conf:ro \
-d nginx

- name: Install AppAPI
run: |
sleep 60s
docker exec -w /var/www/html/apps nextcloud-docker git clone https://github.com/nextcloud/${{ env.APP_NAME }}.git
docker exec -w /var/www/html/apps/${{ env.APP_NAME }} nextcloud-docker git fetch origin $GITHUB_REF
docker exec -w /var/www/html/apps/${{ env.APP_NAME }} nextcloud-docker git checkout FETCH_HEAD
docker exec nextcloud-docker sudo -u www-data php occ app:enable app_api
docker exec nextcloud-docker sudo -u www-data php occ app_api:daemon:register \
harp_proxy "Harp Proxy with DSP" "docker-install" "http" "appapi-harp:8780" "http://nextcloud" \
--harp --harp_frp_address "appapi-harp:8782" --harp_shared_key "some_very_secure_password" \
--net=master_bridge --set-default
docker exec nextcloud-docker sudo -u www-data php occ app_api:daemon:list
docker exec nextcloud-docker ping -c 1 appapi-harp
docker exec nextcloud-docker ping -c 1 nextcloud

- name: Registering and enabling Skeleton ExApp
run: |
docker exec nextcloud-docker sudo -u www-data php occ app_api:app:register app-skeleton-python harp_proxy \
--info-xml https://raw.githubusercontent.com/nextcloud/app-skeleton-python/main/appinfo/info.xml \
--wait-finish

- name: Docker inspect output
if: always()
run: docker inspect nc_app_app-skeleton-python

- name: Disable ExApp
run: |
docker exec nextcloud-docker sudo -u www-data php occ app_api:app:disable app-skeleton-python

- name: Copy NC log to host
if: always()
run: docker cp nextcloud-docker:/var/www/html/data/nextcloud.log nextcloud.log

- name: Check logs
run: |
grep -q 'Hello from app-skeleton-python :)' nextcloud.log || error
grep -q 'Bye bye from app-skeleton-python :(' nextcloud.log || error

- name: Save app and HaRP container info & logs
if: always()
run: |
docker inspect appapi-harp | json_pp > harp_bridge_no_tls_container.json
docker logs appapi-harp > harp_bridge_no_tls_container.log 2>&1
docker inspect nc_app_app-skeleton-python | json_pp > app_harp_bridge_no_tls_container.json
docker logs nc_app_app-skeleton-python > app_harp_bridge_no_tls_container.log 2>&1

- name: Unregister Skeleton & Daemon
run: |
docker exec nextcloud-docker sudo -u www-data php occ app_api:app:unregister app-skeleton-python
docker exec nextcloud-docker sudo -u www-data php occ app_api:daemon:unregister harp_proxy

- name: Show all logs
if: always()
run: tail -v -n +1 *container.json *.log

nc-host-harp-host:
runs-on: ubuntu-22.04
name: NC In Host (HaRP-Host network)

services:
postgres:
image: ghcr.io/nextcloud/continuous-integration-postgres-14:latest
ports:
- 4444:5432/tcp
env:
POSTGRES_USER: root
POSTGRES_PASSWORD: rootpassword
POSTGRES_DB: nextcloud
options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5

steps:
- name: Set app env
run: echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

- name: Checkout server
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
with:
submodules: true
repository: nextcloud/server
ref: master

- name: Checkout AppAPI
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
with:
path: apps/${{ env.APP_NAME }}

- name: Set up php 8.3
uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
with:
php-version: 8.3
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, pgsql, pdo_pgsql, redis
coverage: none
ini-file: development
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Check composer file existence
id: check_composer
uses: andstor/file-existence-action@20b4d2e596410855db8f9ca21e96fbe18e12930b # v2
with:
files: apps/${{ env.APP_NAME }}/composer.json

- name: Set up dependencies
if: steps.check_composer.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }}
run: composer i

- name: Set up Nextcloud
env:
DB_PORT: 4444
run: |
mkdir data
./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 \
--database-port=$DB_PORT --database-user=root --database-pass=rootpassword \
--admin-user admin --admin-pass admin
./occ config:system:set loglevel --value=0 --type=integer
./occ config:system:set debug --value=true --type=boolean
./occ config:system:set overwrite.cli.url --value http://127.0.0.1 --type=string
./occ app:enable --force ${{ env.APP_NAME }}

- name: Create HaRP container
run: |
cat apps/${{ env.APP_NAME }}/tests/simple-nginx-NOT-FOR-PRODUCTION.conf
docker run \
-e HP_SHARED_KEY="some_very_secure_password" \
-e NC_INSTANCE_URL="http://127.0.0.1" \
-e HP_LOG_LEVEL="debug" \
-v /var/run/docker.sock:/var/run/docker.sock \
--net host --name appapi-harp \
--restart unless-stopped \
-d ghcr.io/nextcloud/nextcloud-appapi-harp:latest
docker run --net host --name nextcloud --rm \
-v $(pwd)/apps/${{ env.APP_NAME }}/tests/simple-nginx-NOT-FOR-PRODUCTION.conf:/etc/nginx/conf.d/default.conf:ro \
-d nginx

- name: Test deploy
run: |
PHP_CLI_SERVER_WORKERS=2 php -S 127.0.0.1:8080 &
./occ app_api:daemon:register \
harp_proxy "Harp Proxy with DSP" "docker-install" "http" "127.0.0.1:8780" "http://127.0.0.1" \
--harp --harp_frp_address "127.0.0.1:8782" --harp_shared_key "some_very_secure_password" \
--net host --set-default
./occ app_api:daemon:list

./occ app_api:app:register app-skeleton-python harp_proxy \
--info-xml https://raw.githubusercontent.com/nextcloud/app-skeleton-python/main/appinfo/info.xml \
--wait-finish
./occ app_api:app:disable app-skeleton-python

- name: Check logs
run: |
grep -q 'Hello from app-skeleton-python :)' data/nextcloud.log || error
grep -q 'Bye bye from app-skeleton-python :(' data/nextcloud.log || error

- name: Save app and HaRP container info & logs
if: always()
run: |
docker inspect appapi-harp | json_pp > harp_host_container.json
docker logs appapi-harp > harp_host_container.log 2>&1
docker inspect nc_app_app-skeleton-python | json_pp > app_host_container.json
docker logs nc_app_app-skeleton-python > app_host_container.log 2>&1

- name: Unregister Skeleton & Daemon
run: |
./occ app_api:app:unregister app-skeleton-python
./occ app_api:daemon:unregister harp_proxy

- name: Test OCC commands(docker)
run: python3 apps/${{ env.APP_NAME }}/tests/test_occ_commands_docker.py

- name: Show all logs
if: always()
run: tail -v -n +1 *container.json *.log data/nextcloud.log

tests-deploy-success:
permissions:
contents: none
runs-on: ubuntu-22.04
needs: [nc-host-app-docker, nc-docker-app-docker, nc-docker-dsp-http,
nc-docker-dsp-https, nc-host-app-docker-redis, nc-host-network-host]
nc-docker-dsp-https, nc-host-app-docker-redis, nc-host-network-host,
nc-docker-harp-bridge, nc-docker-harp-bridge-no-tls, nc-host-harp-host]
name: Tests-Deploy-OK
steps:
- run: echo "Tests-Deploy passed successfully"
4 changes: 4 additions & 0 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@
['name' => 'DaemonConfig#startTestDeploy', 'url' => '/daemons/{name}/test_deploy', 'verb' => 'POST'],
['name' => 'DaemonConfig#stopTestDeploy', 'url' => '/daemons/{name}/test_deploy', 'verb' => 'DELETE'],
['name' => 'DaemonConfig#getTestDeployStatus', 'url' => '/daemons/{name}/test_deploy/status', 'verb' => 'GET'],

// HaRP actions
['name' => 'Harp#getExAppMetadata', 'url' => '/harp/exapp-meta', 'verb' => 'GET'],
['name' => 'Harp#getUserInfo', 'url' => '/harp/user-info', 'verb' => 'GET'],
],
'ocs' => [
// Logging
Expand Down
2 changes: 1 addition & 1 deletion js/app_api-adminSettings.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion js/app_api-adminSettings.js.map

Large diffs are not rendered by default.

7 changes: 5 additions & 2 deletions lib/Command/Daemon/ListDaemons.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int

$output->writeln('Registered ExApp daemon configs:');
$table = new Table($output);
$table->setHeaders(['Def', 'Name', 'Display name', 'Deploy ID', 'Protocol', 'Host', 'NC Url']);
$table->setHeaders(['Def', 'Name', 'Display name', 'Deploy ID', 'Protocol', 'Host', 'NC Url', 'Is HaRP', 'HaRP FRP Address', 'HaRP Docker Socket Port']);
$rows = [];

foreach ($daemonConfigs as $daemon) {
Expand All @@ -53,7 +53,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$daemon->getAcceptsDeployId(),
$daemon->getProtocol(),
$daemon->getHost(),
$daemon->getDeployConfig()['nextcloud_url']
$daemon->getDeployConfig()['nextcloud_url'],
isset($daemon->getDeployConfig()['harp']) ? 'yes' : 'no',
$daemon->getDeployConfig()['harp']['frp_address'] ?? '(none)',
$daemon->getDeployConfig()['harp']['docker_socket_port'] ?? '(none)',
];
}

Expand Down
Loading
Loading