From 209167c4201178f6d83d613d7d181290eff6be9c Mon Sep 17 00:00:00 2001 From: Seth Falco Date: Sun, 30 Jul 2023 17:47:51 +0100 Subject: [PATCH 1/4] chore: upgrade docs to docker compose v2 Signed-off-by: Seth Falco --- .github/actions/run-tests/test_runner/db.py | 24 +++---- .../test_runner/docker_management.py | 14 ++--- .../actions/run-tests/test_runner/runner.py | 15 +++-- .../actions/run-tests/test_runner/test_env.py | 62 +++++++++---------- docs/dev/contributing/setup.md | 4 +- 5 files changed, 59 insertions(+), 60 deletions(-) diff --git a/.github/actions/run-tests/test_runner/db.py b/.github/actions/run-tests/test_runner/db.py index a72b04b92..285c49203 100644 --- a/.github/actions/run-tests/test_runner/db.py +++ b/.github/actions/run-tests/test_runner/db.py @@ -5,26 +5,26 @@ def __init__(self, user='tester', password='tester_pass', db='nc_test'): self.user = user self.password = password self.db = db - + def getUser(self): return self.user def getDb(self): return self.db - + def getPassword(self): return self.password - + def callSQL(self, input, params = [], text=True, capture_output=True, stdin=None): cmd = [ - 'docker-compose', 'exec', '-T', 'postgres', 'psql', '-U', self.user, self.db, + 'docker', 'compose', 'exec', '-T', 'postgres', 'psql', '-U', self.user, self.db, '-v', 'ON_ERROR_STOP=1' ] return p.pr.run(cmd + params, text=text, input=input, capture_output=capture_output, stdin=stdin) - + def dumpDb(self, name): cmd = [ - 'docker-compose', 'exec', '-T', 'postgres', 'pg_dump', '-U', self.user, self.db, '--clean', '--if-exists' + 'docker', 'compose', 'exec', '-T', 'postgres', 'pg_dump', '-U', self.user, self.db, '--clean', '--if-exists' ] with open(name, 'w') as fp: p.pr.run(cmd, stdout=fp).check_returncode() @@ -34,27 +34,27 @@ def __init__(self, user='tester', password='tester_pass', db='nc_test'): self.user = user self.password = password self.db = db - + def getUser(self): return self.user - + def getDb(self): return self.db - + def getPassword(self): return self.password def callSQL(self, input, params = [], text=True, capture_output=True, stdin=None): cmd = [ - 'docker-compose', 'exec', '-T', 'mysql', 'mysql', '-u', self.user, + 'docker', 'compose', 'exec', '-T', 'mysql', 'mysql', '-u', self.user, '-p{pwd}'.format(pwd=self.password), self.db ] # print('input', input) return p.pr.run(cmd + params, text=text, input=input, capture_output=capture_output, stdin=stdin) - + def dumpDb(self, name): cmd = [ - 'docker-compose', 'exec', '-T', 'mysql', 'mysqldump', '-u', self.user, + 'docker', 'compose', 'exec', '-T', 'mysql', 'mysqldump', '-u', self.user, '-p{pwd}'.format(pwd=self.password), '--add-drop-database', '--database', self.db ] with open(name, 'w') as fp: diff --git a/.github/actions/run-tests/test_runner/docker_management.py b/.github/actions/run-tests/test_runner/docker_management.py index 82412696c..469cf345a 100644 --- a/.github/actions/run-tests/test_runner/docker_management.py +++ b/.github/actions/run-tests/test_runner/docker_management.py @@ -5,7 +5,7 @@ def pullImages(args, quiet=True): l.logger.printTask('Pulling pre-built images') - cmd = ['docker-compose', 'pull'] + cmd = ['docker', 'compose', 'pull'] if quiet: cmd.append('--quiet') p.pr.run(cmd).check_returncode() @@ -29,8 +29,8 @@ def runPull(localName, remoteName): def buildImages(args, pull=True): l.logger.printTask('Building images') - - cmd = ['docker-compose', 'build', '--force-rm'] + + cmd = ['docker', 'compose', 'build', '--force-rm'] if pull: cmd.append('--pull') if args.ci: @@ -41,7 +41,7 @@ def buildImages(args, pull=True): p.pr.run(cmd).check_returncode() - p.pr.run(['docker-compose', 'build', '--pull', '--force-rm', 'mysql', 'postgres', 'www']).check_returncode() + p.pr.run(['docker', 'compose', 'build', '--pull', '--force-rm', 'mysql', 'postgres', 'www']).check_returncode() l.logger.printTask('Building images finished.') @@ -83,14 +83,14 @@ def handleDockerImages(args): if args.pull or args.create_images: pullImages(args, not args.verbose) t.toc('Pulling done') - + if args.create_images: pull = not args.pull_php_base_image buildImages(args, pull) t.toc('Building done') - + if args.push_images: pushImages(args) - + l.logger.endGroup() t.toc() diff --git a/.github/actions/run-tests/test_runner/runner.py b/.github/actions/run-tests/test_runner/runner.py index 0e1582bb7..8eac6d59e 100644 --- a/.github/actions/run-tests/test_runner/runner.py +++ b/.github/actions/run-tests/test_runner/runner.py @@ -9,23 +9,23 @@ def __init__(self): pass def __buildRunCmd(self, args, subArgs): - cmd = ['docker-compose', 'run', '--rm', 'dut'] + cmd = ['docker', 'compose', 'run', '--rm', 'dut'] if args.run_unit_tests: cmd.append('--run-unit-tests') - + if args.run_integration_tests: cmd.append('--run-integration-tests') - + if args.run_migration_tests: cmd.append('--run-migration-tests') - + if args.extract_code_coverage: cmd.append('--create-coverage-report') - + if args.install_composer_deps: cmd.append('--install-composer-deps') - + if args.build_npm: cmd.append('--build-npm') @@ -42,7 +42,7 @@ def __getDebugMode(self, args): modes.append('trace') if args.enable_profiling: modes.append('profile') - + return ",".join(modes) def runTests(self, args, subArgs, db): @@ -64,4 +64,3 @@ def runTests(self, args, subArgs, db): sp = p.pr.run(cmd, env=env) return sp.returncode - diff --git a/.github/actions/run-tests/test_runner/test_env.py b/.github/actions/run-tests/test_runner/test_env.py index 0796d4604..c5e2ed90a 100644 --- a/.github/actions/run-tests/test_runner/test_env.py +++ b/.github/actions/run-tests/test_runner/test_env.py @@ -13,7 +13,7 @@ def __init__(self): def ensureFolderStructureExists(self): if not os.path.isdir('volumes'): os.mkdir('volumes') - + volumeFolders = ( 'nextcloud', 'data', 'cookbook', 'mysql', 'postgres', 'www', 'dumps', 'coverage', 'output' @@ -22,10 +22,10 @@ def ensureFolderStructureExists(self): p = os.path.join('volumes', f) if os.path.exists(p) and not os.path.isdir(p): raise Exception('Cannot create folder structure appropriately. Offending folder is %s' % p) - + if not os.path.exists(p): os.mkdir(os.path.join('volumes', f)) - + def startDatabase(self, db): def startMysql(): def checkRunning(): @@ -36,13 +36,13 @@ def checkRunning(): if sp.stdout.strip() == 'healthy': return time.sleep(1) - + raise Exception('Starting of MySQL container failed.') l.logger.printDebug('Starting MySQL database container') - p.pr.run(['docker-compose', 'up', '-d', 'mysql']).check_returncode() + p.pr.run(['docker', 'compose', 'up', '-d', 'mysql']).check_returncode() checkRunning() - + def startPostgresql(): def checkRunning(pgCaller): for i in range(0,20): @@ -51,10 +51,10 @@ def checkRunning(pgCaller): return time.sleep(1) raise Exception('Starting of PostgreSQL failed.') - + l.logger.printDebug('Starting PostgreSQL container') - p.pr.run(['docker-compose', 'up', '-d', 'postgres']).check_returncode() - + p.pr.run(['docker', 'compose', 'up', '-d', 'postgres']).check_returncode() + pgCaller = test_runner.db.PostgresConnector() checkRunning(pgCaller) @@ -74,7 +74,7 @@ def startSqlite(): def stopDatabase(self, db): def stopContainer(name): l.logger.printTask('Stopping container {name}'.format(name=name)) - p.pr.run(['docker-compose', 'stop', name]).check_returncode() + p.pr.run(['docker', 'compose', 'stop', name]).check_returncode() def handleMySql(): stopContainer('mysql') @@ -91,10 +91,10 @@ def handleSqlite(): 'sqlite': handleSqlite, } mapping[db]() - + def stopContainers(self): l.logger.printTask('Stopping remaining containers') - p.pr.run(['docker-compose', 'stop']).check_returncode() + p.pr.run(['docker', 'compose', 'stop']).check_returncode() def __dropEnvironment(self, db): def cleanMysql(): @@ -106,7 +106,7 @@ def cleanMysql(): sqls = ['DROP TABLE {t};'.format(t=t) for t in tables if t != ''] sql = "\n".join(sqls) caller.callSQL(sql, capture_output=True).check_returncode() - + def cleanPostgres(): caller = test_runner.db.PostgresConnector() sql = '''DROP SCHEMA public CASCADE; @@ -115,10 +115,10 @@ def cleanPostgres(): GRANT ALL ON SCHEMA public TO PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO PUBLIC;'''.format(user=caller.getUser()) caller.callSQL(sql, capture_output=True).check_returncode() - + def cleanSqlite(): pass - + l.logger.printTask('Dropping the environment') mappingDb = { @@ -130,7 +130,7 @@ def cleanSqlite(): l.logger.printTask('Cleaning the database') mappingDb[db]() l.logger.printTask('Database has been reset.') - + l.logger.printTask('Cleaning out the NC files.') p.pr.run('rm -rf volumes/{data,nextcloud}/{*,.??*}', shell=True).check_returncode() l.logger.printTask('Removal of files done.') @@ -141,12 +141,12 @@ def cleanSqlite(): def __runPhpScript(self, filename): with open(filename, 'r') as fp: data = fp.read() - + return p.pr.run( - ['docker-compose', 'run', '--rm', '-T', 'php'], input=data, + ['docker', 'compose', 'run', '--rm', '-T', 'php'], input=data, capture_output=True, text=True ) - + def __setupServer(self, db, branch): l.logger.printTask('Starting installing the server') @@ -164,18 +164,18 @@ def __setupServer(self, db, branch): 'git', 'submodule', 'update', '--init', '--depth', '1' ], cwd='volumes/nextcloud').check_returncode() timer.toc('Checkout of git repos') - + l.logger.printTask('Create folder structure for correct permissions') p.pr.run(['mkdir', '-p', 'custom_apps/cookbook', 'data'], cwd='volumes/nextcloud').check_returncode() def installGeneric(options): cmd = [ - 'docker-compose', 'run', '--rm', '-T', 'occ', 'maintenance:install', + 'docker', 'compose', 'run', '--rm', '-T', 'occ', 'maintenance:install', '--admin-user', 'admin', '--admin-pass', 'admin' ] + options p.pr.run(cmd).check_returncode() - + def installWithMysql(): caller = test_runner.db.MysqlConnector() installGeneric([ @@ -190,7 +190,7 @@ def installWithPgSQL(): ]) def installWithSQLite(): installGeneric(['--database', 'sqlite']) - + mappingDb = { 'mysql': installWithMysql, 'pgsql': installWithPgSQL, @@ -218,7 +218,7 @@ def setupApp(self, installUntested): if installUntested: l.logger.printTask('Adding exception for app to be allowed as untested app') self.__runPhpScript('scripts/enable_app_install_script.php') - + l.logger.printTask('Synchronize the app code base to volume') excludes = ['/.git/', '/.github/actions/run-tests/volumes/', '/node_modules/'] excludePairs = [['--exclude', x] for x in excludes] @@ -232,7 +232,7 @@ def setupApp(self, installUntested): l.logger.printTask('Activate the cookbook app in the server') p.pr.run( - ['docker-compose', 'run', '--rm', '-T', 'occ', 'app:enable', 'cookbook'] + ['docker', 'compose', 'run', '--rm', '-T', 'occ', 'app:enable', 'cookbook'] ).check_returncode() l.logger.printTask('Installation of cookbook finished') @@ -245,19 +245,19 @@ def prepareBasicEnvironment(self, db, branch): l.logger.startGroup('Preparing server environment') totalTimer.tic() - + timer.tic() self.startDatabase(db) timer.toc('Started database') - + timer.tic() self.__dropEnvironment(db) timer.toc('Environment cleaned') - + timer.tic() self.__setupServer(db, branch) timer.toc('Server installed') - + totalTimer.toc('Environment preparation') l.logger.endGroup() @@ -267,7 +267,7 @@ def __finishEnvironment(self, http_server): timer.tic() l.logger.printTask('Start fpm and www containers') - p.pr.run(['docker-compose', 'up', '-d', 'www', 'fpm']).check_returncode() + p.pr.run(['docker', 'compose', 'up', '-d', 'www', 'fpm']).check_returncode() httpMapper = { 'apache': 'apache', @@ -275,7 +275,7 @@ def __finishEnvironment(self, http_server): } l.logger.printTask('Start HTTP server') p.pr.run( - ['docker-compose', 'up', '-d', httpMapper[http_server]] + ['docker', 'compose', 'up', '-d', httpMapper[http_server]] ).check_returncode() l.logger.printTask('Started all containers') diff --git a/docs/dev/contributing/setup.md b/docs/dev/contributing/setup.md index 711193c8e..e748bb4ab 100644 --- a/docs/dev/contributing/setup.md +++ b/docs/dev/contributing/setup.md @@ -14,7 +14,7 @@ There are multiple methods to set up the Nextcloud development environment. Follow the instructions in this repository, noting that the default username/password are admin/admin.
Please pay attention to the warning from that repository: > :warning: DO NOT USE THIS IN PRODUCTION Various settings in this setup are considered insecure and default passwords and secrets are used all over the place -1. There is also [this repository](https://github.com/christianlupus/nextcloud-docker-debug) that contains a configuration using docker-compose as well. This setup is tailored down to allow easy debugging and profiling of apps. The repository has an extensive documentation attached in form of a README file on how to setup.
+1. There is also [this repository](https://github.com/christianlupus/nextcloud-docker-debug) that contains a configuration using Docker Compose as well. This setup is tailored down to allow easy debugging and profiling of apps. The repository has an extensive documentation attached in form of a README file on how to setup.
**This repository is only for development purposes. Do not use for productive usage!** ## Add Cookbook to your Nextcloud environment's apps directory @@ -39,7 +39,7 @@ The easiest way might be to add a new line in this section after cloning [`nextc ``` You might need to adopt the path specification according to your local setup. Also note that docker-compose needs the correct indentation (spaces and no tabs!) to work well. -Be sure to recreate the containers after modifying `docker-compose.yml` using `docker-compose up -d`. +Be sure to recreate the containers after modifying `docker-compose.yml` using `docker compose up -d`. ## Install PHP dependencies From 1b25664bfdfa0527a872d2119ee222a877fad308 Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Tue, 29 Aug 2023 08:21:00 +0200 Subject: [PATCH 2/4] Allow legacy docker compose by CLI parameter Signed-off-by: Christian Wolf --- .github/actions/run-tests/run-locally.py | 1 + .../run-tests/test_runner/argument_parser.py | 1 + .github/actions/run-tests/test_runner/db.py | 19 ++++++++------- .../run-tests/test_runner/docker_helper.py | 15 ++++++++++++ .../test_runner/docker_management.py | 12 +++++++--- .../actions/run-tests/test_runner/runner.py | 3 ++- .../actions/run-tests/test_runner/test_env.py | 23 ++++++++++--------- 7 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 .github/actions/run-tests/test_runner/docker_helper.py diff --git a/.github/actions/run-tests/run-locally.py b/.github/actions/run-tests/run-locally.py index d0e374c62..835f8d77e 100755 --- a/.github/actions/run-tests/run-locally.py +++ b/.github/actions/run-tests/run-locally.py @@ -13,6 +13,7 @@ debugpy.wait_for_client() # print(args) +test_runner.docker_helper.initialize(args) test_runner.ci_printer.logger = test_runner.ci_printer.CILogger(args.ci) diff --git a/.github/actions/run-tests/test_runner/argument_parser.py b/.github/actions/run-tests/test_runner/argument_parser.py index c14f287e9..f43c0959c 100644 --- a/.github/actions/run-tests/test_runner/argument_parser.py +++ b/.github/actions/run-tests/test_runner/argument_parser.py @@ -7,6 +7,7 @@ def parseArguments(): parser.add_argument('-v', '--verbose', action='store_true', help='Do not hide the output of intermediate commands') parser.add_argument('--debug-python', action='store_true', help='Activate the python debugger to develop the test environments.') + parser.add_argument('--use-docker-compose-legacy', action='store_true', help='Use the legacy docker-compose v1 instead of the new docker compose.') group = parser.add_argument_group('Docker image management', 'Manage the docker images involved in the test routines.') diff --git a/.github/actions/run-tests/test_runner/db.py b/.github/actions/run-tests/test_runner/db.py index 285c49203..52e72e281 100644 --- a/.github/actions/run-tests/test_runner/db.py +++ b/.github/actions/run-tests/test_runner/db.py @@ -1,10 +1,12 @@ import test_runner.proc as p +import test_runner.docker_helper class PostgresConnector: def __init__(self, user='tester', password='tester_pass', db='nc_test'): self.user = user self.password = password self.db = db + self.dockerComposeCmd = test_runner.docker_helper.instance.getDockerCompose() def getUser(self): return self.user @@ -16,15 +18,15 @@ def getPassword(self): return self.password def callSQL(self, input, params = [], text=True, capture_output=True, stdin=None): - cmd = [ - 'docker', 'compose', 'exec', '-T', 'postgres', 'psql', '-U', self.user, self.db, + cmd = self.dockerComposeCmd + [ + 'exec', '-T', 'postgres', 'psql', '-U', self.user, self.db, '-v', 'ON_ERROR_STOP=1' ] return p.pr.run(cmd + params, text=text, input=input, capture_output=capture_output, stdin=stdin) def dumpDb(self, name): - cmd = [ - 'docker', 'compose', 'exec', '-T', 'postgres', 'pg_dump', '-U', self.user, self.db, '--clean', '--if-exists' + cmd = self.dockerComposeCmd + [ + 'exec', '-T', 'postgres', 'pg_dump', '-U', self.user, self.db, '--clean', '--if-exists' ] with open(name, 'w') as fp: p.pr.run(cmd, stdout=fp).check_returncode() @@ -34,6 +36,7 @@ def __init__(self, user='tester', password='tester_pass', db='nc_test'): self.user = user self.password = password self.db = db + self.dockerComposeCmd = test_runner.docker_helper.instance.getDockerCompose() def getUser(self): return self.user @@ -45,16 +48,16 @@ def getPassword(self): return self.password def callSQL(self, input, params = [], text=True, capture_output=True, stdin=None): - cmd = [ - 'docker', 'compose', 'exec', '-T', 'mysql', 'mysql', '-u', self.user, + cmd = self.dockerComposeCmd + [ + 'exec', '-T', 'mysql', 'mysql', '-u', self.user, '-p{pwd}'.format(pwd=self.password), self.db ] # print('input', input) return p.pr.run(cmd + params, text=text, input=input, capture_output=capture_output, stdin=stdin) def dumpDb(self, name): - cmd = [ - 'docker', 'compose', 'exec', '-T', 'mysql', 'mysqldump', '-u', self.user, + cmd = self.dockerComposeCmd + [ + 'exec', '-T', 'mysql', 'mysqldump', '-u', self.user, '-p{pwd}'.format(pwd=self.password), '--add-drop-database', '--database', self.db ] with open(name, 'w') as fp: diff --git a/.github/actions/run-tests/test_runner/docker_helper.py b/.github/actions/run-tests/test_runner/docker_helper.py new file mode 100644 index 000000000..383b2526c --- /dev/null +++ b/.github/actions/run-tests/test_runner/docker_helper.py @@ -0,0 +1,15 @@ +class DockerHelper: + def __init__(self, args): + self.useLegacy = args.use_docker_compose_legacy + + def getDockerCompose(self): + if self.useLegacy: + return ['docker-compose'] + else: + return ['docker', 'compose'] + +instance = None + +def initialize(args): + global instance + instance = DockerHelper(args) diff --git a/.github/actions/run-tests/test_runner/docker_management.py b/.github/actions/run-tests/test_runner/docker_management.py index 469cf345a..267990374 100644 --- a/.github/actions/run-tests/test_runner/docker_management.py +++ b/.github/actions/run-tests/test_runner/docker_management.py @@ -2,10 +2,14 @@ import test_runner.timer import test_runner.ci_printer as l import test_runner.proc as p +import test_runner.docker_helper def pullImages(args, quiet=True): l.logger.printTask('Pulling pre-built images') - cmd = ['docker', 'compose', 'pull'] + + dockerComposeCmd = test_runner.docker_helper.instance.getDockerCompose() + + cmd = dockerComposeCmd + ['pull'] if quiet: cmd.append('--quiet') p.pr.run(cmd).check_returncode() @@ -30,7 +34,9 @@ def runPull(localName, remoteName): def buildImages(args, pull=True): l.logger.printTask('Building images') - cmd = ['docker', 'compose', 'build', '--force-rm'] + dockerComposeCmd = test_runner.docker_helper.instance.getDockerCompose() + + cmd = dockerComposeCmd + ['build', '--force-rm'] if pull: cmd.append('--pull') if args.ci: @@ -41,7 +47,7 @@ def buildImages(args, pull=True): p.pr.run(cmd).check_returncode() - p.pr.run(['docker', 'compose', 'build', '--pull', '--force-rm', 'mysql', 'postgres', 'www']).check_returncode() + p.pr.run(dockerComposeCmd + ['build', '--pull', '--force-rm', 'mysql', 'postgres', 'www']).check_returncode() l.logger.printTask('Building images finished.') diff --git a/.github/actions/run-tests/test_runner/runner.py b/.github/actions/run-tests/test_runner/runner.py index 8eac6d59e..0c9510773 100644 --- a/.github/actions/run-tests/test_runner/runner.py +++ b/.github/actions/run-tests/test_runner/runner.py @@ -1,6 +1,7 @@ import test_runner.ci_printer as l import test_runner.proc as p +import test_runner.docker_helper import os @@ -9,7 +10,7 @@ def __init__(self): pass def __buildRunCmd(self, args, subArgs): - cmd = ['docker', 'compose', 'run', '--rm', 'dut'] + cmd = test_runner.docker_helper.instance.getDockerCompose() + ['run', '--rm', 'dut'] if args.run_unit_tests: cmd.append('--run-unit-tests') diff --git a/.github/actions/run-tests/test_runner/test_env.py b/.github/actions/run-tests/test_runner/test_env.py index c5e2ed90a..cfa755da1 100644 --- a/.github/actions/run-tests/test_runner/test_env.py +++ b/.github/actions/run-tests/test_runner/test_env.py @@ -2,13 +2,14 @@ import test_runner.db import test_runner.timer import test_runner.proc as p +import test_runner.docker_helper import time import os class Environment: def __init__(self): - pass + self.dockerComposeCmd = test_runner.docker_helper.instance.getDockerCompose() def ensureFolderStructureExists(self): if not os.path.isdir('volumes'): @@ -40,7 +41,7 @@ def checkRunning(): raise Exception('Starting of MySQL container failed.') l.logger.printDebug('Starting MySQL database container') - p.pr.run(['docker', 'compose', 'up', '-d', 'mysql']).check_returncode() + p.pr.run(self.dockerComposeCmd + ['up', '-d', 'mysql']).check_returncode() checkRunning() def startPostgresql(): @@ -53,7 +54,7 @@ def checkRunning(pgCaller): raise Exception('Starting of PostgreSQL failed.') l.logger.printDebug('Starting PostgreSQL container') - p.pr.run(['docker', 'compose', 'up', '-d', 'postgres']).check_returncode() + p.pr.run(self.dockerComposeCmd + ['up', '-d', 'postgres']).check_returncode() pgCaller = test_runner.db.PostgresConnector() checkRunning(pgCaller) @@ -74,7 +75,7 @@ def startSqlite(): def stopDatabase(self, db): def stopContainer(name): l.logger.printTask('Stopping container {name}'.format(name=name)) - p.pr.run(['docker', 'compose', 'stop', name]).check_returncode() + p.pr.run(self.dockerComposeCmd + ['stop', name]).check_returncode() def handleMySql(): stopContainer('mysql') @@ -94,7 +95,7 @@ def handleSqlite(): def stopContainers(self): l.logger.printTask('Stopping remaining containers') - p.pr.run(['docker', 'compose', 'stop']).check_returncode() + p.pr.run(self.dockerComposeCmd + ['stop']).check_returncode() def __dropEnvironment(self, db): def cleanMysql(): @@ -143,7 +144,7 @@ def __runPhpScript(self, filename): data = fp.read() return p.pr.run( - ['docker', 'compose', 'run', '--rm', '-T', 'php'], input=data, + self.dockerComposeCmd + ['run', '--rm', '-T', 'php'], input=data, capture_output=True, text=True ) @@ -169,8 +170,8 @@ def __setupServer(self, db, branch): p.pr.run(['mkdir', '-p', 'custom_apps/cookbook', 'data'], cwd='volumes/nextcloud').check_returncode() def installGeneric(options): - cmd = [ - 'docker', 'compose', 'run', '--rm', '-T', 'occ', 'maintenance:install', + cmd = self.dockerComposeCmd + [ + 'run', '--rm', '-T', 'occ', 'maintenance:install', '--admin-user', 'admin', '--admin-pass', 'admin' ] + options @@ -232,7 +233,7 @@ def setupApp(self, installUntested): l.logger.printTask('Activate the cookbook app in the server') p.pr.run( - ['docker', 'compose', 'run', '--rm', '-T', 'occ', 'app:enable', 'cookbook'] + self.dockerComposeCmd + ['run', '--rm', '-T', 'occ', 'app:enable', 'cookbook'] ).check_returncode() l.logger.printTask('Installation of cookbook finished') @@ -267,7 +268,7 @@ def __finishEnvironment(self, http_server): timer.tic() l.logger.printTask('Start fpm and www containers') - p.pr.run(['docker', 'compose', 'up', '-d', 'www', 'fpm']).check_returncode() + p.pr.run(self.dockerComposeCmd + ['up', '-d', 'www', 'fpm']).check_returncode() httpMapper = { 'apache': 'apache', @@ -275,7 +276,7 @@ def __finishEnvironment(self, http_server): } l.logger.printTask('Start HTTP server') p.pr.run( - ['docker', 'compose', 'up', '-d', httpMapper[http_server]] + self.dockerComposeCmd + ['up', '-d', httpMapper[http_server]] ).check_returncode() l.logger.printTask('Started all containers') From 10c5ab62a1ceb078eb2b400535a9756578e98c99 Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Tue, 29 Aug 2023 08:30:37 +0200 Subject: [PATCH 3/4] Update github pages setup information Signed-off-by: Christian Wolf --- docs/dev/contributing/setup.md | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/docs/dev/contributing/setup.md b/docs/dev/contributing/setup.md index e748bb4ab..1691fd3ed 100644 --- a/docs/dev/contributing/setup.md +++ b/docs/dev/contributing/setup.md @@ -9,18 +9,23 @@ First a nextcloud server is needed to run the app within. There are multiple methods to set up the Nextcloud development environment. -1. The [official guide](https://docs.nextcloud.com/server/latest/developer_manual/getting_started/devenv.html) walks you through installing Nextcloud and its dependencies on bare metal. -1. Alternatively, you can use [this Docker Compose configuration](https://github.com/juliushaertl/nextcloud-docker-dev). This method is easier in that you don't have to manually install Nextcloud, a SQL database, etc.
+:warning: DO NOT USE THIS IN PRODUCTION Various settings in this setup are considered insecure and default passwords and secrets are used all over the place. + +1. By default, you can use [this Docker Compose configuration](https://github.com/juliushaertl/nextcloud-docker-dev). This method is easier in that you don't have to manually install Nextcloud, a SQL database, etc.
Follow the instructions in this repository, noting that the default username/password are admin/admin.
- Please pay attention to the warning from that repository: - > :warning: DO NOT USE THIS IN PRODUCTION Various settings in this setup are considered insecure and default passwords and secrets are used all over the place -1. There is also [this repository](https://github.com/christianlupus/nextcloud-docker-debug) that contains a configuration using Docker Compose as well. This setup is tailored down to allow easy debugging and profiling of apps. The repository has an extensive documentation attached in form of a README file on how to setup.
- **This repository is only for development purposes. Do not use for productive usage!** +1. Alternatively, the [official guide](https://docs.nextcloud.com/server/latest/developer_manual/getting_started/devenv.html) walks you through installing Nextcloud and its dependencies on bare metal. ## Add Cookbook to your Nextcloud environment's apps directory You must install the checked out version of the app into the corresponding folder of the nextcloud server. +### Usage of [nextcloud-docker-dev](https://github.com/juliushaertl/nextcloud-docker-dev) by juliushaertl (Default) + +If you installed via Docker, [the volumes section of the `docker-compose.yml`](https://github.com/juliushaertl/nextcloud-docker-dev/blob/2bbf26cc257081d9ed72abc947441849fca59dcd/docker-compose.yml#L68) shows that there are many options for specifying apps. + +Just go with the documentation attached in the repository and follow the steps. +This should bring you to a running environment. + ### Bare metal installation If you installed on bare metal (directly in the operating system's HTTP server): @@ -29,21 +34,9 @@ cd /var/www/nextcloud/apps git clone https://github.com/nextcloud/cookbook.git # you may want to clone your own fork if you are contributing pull requests ``` -### Usage of [nextcloud-docker-dev](https://github.com/juliushaertl/nextcloud-docker-dev) by juliushaertl - -If you installed via Docker, [the volumes section of the `docker-compose.yml`](https://github.com/juliushaertl/nextcloud-docker-dev/blob/2bbf26cc257081d9ed72abc947441849fca59dcd/docker-compose.yml#L68) shows that there are many options for specifying apps. - -The easiest way might be to add a new line in this section after cloning [`nextcloud/cookbook`](https://github.com/nextcloud/cookbook) in the same folder as [`juliushaertl/nextcloud-docker-dev`](https://github.com/juliushaertl/nextcloud-docker-dev): -``` -- ../cookbook:/var/www/html/apps/cookbook:ro -``` -You might need to adopt the path specification according to your local setup. Also note that docker-compose needs the correct indentation (spaces and no tabs!) to work well. - -Be sure to recreate the containers after modifying `docker-compose.yml` using `docker compose up -d`. - ## Install PHP dependencies -The app needs some depdencies in the PHP backend. These are managed via [composer](http://composer.org). Make sure, you have composer ready on your development machine. +The app needs some dependencies in the PHP backend. These are managed via [composer](http://composer.org). Make sure, you have composer ready on your development machine. To install the required packages just run in the root of the checked-out source folder of the cookbook app ``` From 3c5fac08a4487ea315db29c14d4c7b9b09ecb763 Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Tue, 29 Aug 2023 08:30:45 +0200 Subject: [PATCH 4/4] Update changelog Signed-off-by: Christian Wolf --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd31fb18e..4a1564414 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,6 +63,8 @@ [#1783](https://github.com/nextcloud/cookbook/pull/1783) @dependabot - Add editorconfig file for better cooperation [#1771](https://github.com/nextcloud/cookbook/pull/1771) @SethFalco +- Use docker compose for tests by default + [#1772](https://github.com/nextcloud/cookbook/pull/1772) @SethFalco ## 0.10.2 - 2023-03-24