├── .drone.star ├── .editorconfig ├── .github ├── issue_template.md └── settings.yml ├── .gitignore ├── .renovaterc.json ├── .trivyignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── images └── Home-UI.png └── v22.04 ├── Dockerfile.multiarch └── overlay └── .keep /.drone.star: -------------------------------------------------------------------------------- 1 | DOCKER_PUSHRM_IMAGE = "docker.io/chko/docker-pushrm:1" 2 | DRONE_DOCKER_BUILDX_IMAGE = "docker.io/owncloudci/drone-docker-buildx:4" 3 | MARIADB_IMAGE = "docker.io/mariadb:10.11" 4 | REDIS_IMAGE = "docker.io/redis:8" 5 | UBUNTU_IMAGE = "docker.io/owncloud/ubuntu:22.04" 6 | STANDALONE_CHROME_DEBUG_IMAGE = "docker.io/selenium/standalone-chrome-debug:3.141.59-oxygen" 7 | 8 | def main(ctx): 9 | versions = [ 10 | { 11 | "value": "10.15.2", 12 | "tarball": "https://download.owncloud.com/server/stable/owncloud-complete-20250311.tar.bz2", 13 | "tarball_sha": "bd7cb99f91c11f9166e2bca7c0a1040ea5ae72ffaa3f9f38b5afa83ee7e954e8", 14 | "php": "7.4", 15 | "base": "v22.04", 16 | "tags": ["10.15", "10", "latest"], 17 | }, 18 | #{ 19 | # "value": "10.14.0", 20 | # "tarball": "https://download.owncloud.com/server/stable/owncloud-complete-20240226.tar.bz2", 21 | # "tarball_sha": "7b23e7f189f5ceb606fb95e96b5caa202299b3cea90e524fc59bdd3c9c30853c", 22 | # "php": "7.4", 23 | # "base": "v20.04", 24 | # "tags": ["10.14", "10", "latest"], 25 | #}, 26 | #{ 27 | # "value": "10.13.4", 28 | # "tarball": "https://download.owncloud.com/server/stable/owncloud-complete-20231213.tar.bz2", 29 | # "tarball_sha": "4e39c500cd99e2b2a988d593aa43bf67c29e6704ecbe03fc068872f37018f523", 30 | # "php": "7.4", 31 | # "base": "v20.04", 32 | # "tags": ["10.13"], 33 | #}, 34 | ] 35 | 36 | config = { 37 | "version": None, 38 | "splitAPI": 10, 39 | "splitUI": 5, 40 | "description": "ownCloud - Secure Collaboration Platform", 41 | "repo": ctx.repo.name, 42 | } 43 | 44 | stages = [] 45 | shell = [] 46 | shell_bases = [] 47 | linter = lint(config) 48 | 49 | for version in versions: 50 | config["version"] = version 51 | 52 | if config["version"]["base"] not in shell_bases: 53 | shell_bases.append(config["version"]["base"]) 54 | shell.extend(shellcheck(config)) 55 | 56 | config["version"]["qa"] = config["version"].get("qa", "https://download.owncloud.com/server/daily/owncloud-daily-master-qa.tar.bz2") 57 | config["version"]["behat"] = config["version"].get("behat", "https://raw.githubusercontent.com/owncloud/core/master/vendor-bin/behat/composer.json") 58 | 59 | inner = [] 60 | 61 | config["internal"] = "%s-%s-%s" % (ctx.build.commit, "${DRONE_BUILD_NUMBER}", config["version"]["value"]) 62 | config["version"]["tags"] = version.get("tags", []) 63 | config["version"]["tags"].append(config["version"]["value"]) 64 | 65 | for d in docker(config): 66 | d["depends_on"].append(linter["name"]) 67 | inner.append(d) 68 | 69 | stages.extend(inner) 70 | 71 | linter["steps"].extend(shell) 72 | 73 | after = [ 74 | documentation(config), 75 | rocketchat(config), 76 | ] 77 | 78 | for s in stages: 79 | for a in after: 80 | a["depends_on"].append(s["name"]) 81 | 82 | return [linter] + stages + after 83 | 84 | def docker(config): 85 | pre = [{ 86 | "kind": "pipeline", 87 | "type": "docker", 88 | "name": "prepublish-%s" % (config["version"]["value"]), 89 | "platform": { 90 | "os": "linux", 91 | "arch": "amd64", 92 | }, 93 | "steps": download(config) + prepublish(config) + sleep(config) + trivy(config), 94 | "depends_on": [], 95 | "trigger": { 96 | "ref": [ 97 | "refs/heads/master", 98 | "refs/pull/**", 99 | ], 100 | }, 101 | }] 102 | 103 | post = [{ 104 | "kind": "pipeline", 105 | "type": "docker", 106 | "name": "cleanup-%s" % (config["version"]["value"]), 107 | "platform": { 108 | "os": "linux", 109 | "arch": "amd64", 110 | }, 111 | "clone": { 112 | "disable": True, 113 | }, 114 | "steps": cleanup(config), 115 | "depends_on": [], 116 | "trigger": { 117 | "ref": [ 118 | "refs/heads/master", 119 | "refs/pull/**", 120 | ], 121 | "status": [ 122 | "success", 123 | "failure", 124 | ], 125 | }, 126 | }] 127 | 128 | push = [{ 129 | "kind": "pipeline", 130 | "type": "docker", 131 | "name": "publish-%s" % (config["version"]["value"]), 132 | "platform": { 133 | "os": "linux", 134 | "arch": "amd64", 135 | }, 136 | "steps": download(config) + publish(config), 137 | "depends_on": [], 138 | "trigger": { 139 | "ref": [ 140 | "refs/heads/master", 141 | ], 142 | }, 143 | }] 144 | 145 | test = [] 146 | 147 | for step in list(range(1, config["splitAPI"] + 1)): 148 | config["step"] = step 149 | 150 | test.append({ 151 | "kind": "pipeline", 152 | "type": "docker", 153 | "name": "api%d-%s" % (config["step"], config["version"]["value"]), 154 | "platform": { 155 | "os": "linux", 156 | "arch": "amd64", 157 | }, 158 | "clone": { 159 | "disable": True, 160 | }, 161 | "steps": wait_server(config) + api(config), 162 | "services": [ 163 | { 164 | "name": "server", 165 | "image": "registry.drone.owncloud.com/owncloud/%s:%s" % (config["repo"], config["internal"]), 166 | "environment": { 167 | "DEBUG": "true", 168 | "OWNCLOUD_TRUSTED_DOMAINS": "server", 169 | "OWNCLOUD_APPS_INSTALL": "https://github.com/owncloud/testing/releases/download/latest/testing.tar.gz", 170 | "OWNCLOUD_APPS_ENABLE": "testing", 171 | "OWNCLOUD_REDIS_HOST": "redis", 172 | "OWNCLOUD_DB_TYPE": "mysql", 173 | "OWNCLOUD_DB_HOST": "mysql", 174 | "OWNCLOUD_DB_USERNAME": "owncloud", 175 | "OWNCLOUD_DB_PASSWORD": "owncloud", 176 | "OWNCLOUD_DB_NAME": "owncloud", 177 | }, 178 | }, 179 | { 180 | "name": "mysql", 181 | "image": MARIADB_IMAGE, 182 | "environment": { 183 | "MYSQL_ROOT_PASSWORD": "owncloud", 184 | "MYSQL_USER": "owncloud", 185 | "MYSQL_PASSWORD": "owncloud", 186 | "MYSQL_DATABASE": "owncloud", 187 | }, 188 | }, 189 | { 190 | "name": "redis", 191 | "image": REDIS_IMAGE, 192 | }, 193 | ], 194 | "depends_on": [], 195 | "trigger": { 196 | "ref": [ 197 | "refs/heads/master", 198 | "refs/pull/**", 199 | ], 200 | }, 201 | }) 202 | 203 | for step in list(range(1, config["splitUI"] + 1)): 204 | config["step"] = step 205 | 206 | test.append({ 207 | "kind": "pipeline", 208 | "type": "docker", 209 | "name": "ui%d-%s" % (config["step"], config["version"]["value"]), 210 | "platform": { 211 | "os": "linux", 212 | "arch": "amd64", 213 | }, 214 | "clone": { 215 | "disable": True, 216 | }, 217 | "steps": wait_server(config) + wait_email(config) + ui(config), 218 | "services": [ 219 | { 220 | "name": "server", 221 | "image": "registry.drone.owncloud.com/owncloud/%s:%s" % (config["repo"], config["internal"]), 222 | "environment": { 223 | "DEBUG": "true", 224 | "OWNCLOUD_TRUSTED_DOMAINS": "server", 225 | "OWNCLOUD_APPS_INSTALL": "https://github.com/owncloud/testing/releases/download/latest/testing.tar.gz", 226 | "OWNCLOUD_APPS_ENABLE": "testing", 227 | "OWNCLOUD_REDIS_HOST": "redis", 228 | "OWNCLOUD_DB_TYPE": "mysql", 229 | "OWNCLOUD_DB_HOST": "mysql", 230 | "OWNCLOUD_DB_USERNAME": "owncloud", 231 | "OWNCLOUD_DB_PASSWORD": "owncloud", 232 | "OWNCLOUD_DB_NAME": "owncloud", 233 | }, 234 | }, 235 | { 236 | "name": "mysql", 237 | "image": MARIADB_IMAGE, 238 | "environment": { 239 | "MYSQL_ROOT_PASSWORD": "owncloud", 240 | "MYSQL_USER": "owncloud", 241 | "MYSQL_PASSWORD": "owncloud", 242 | "MYSQL_DATABASE": "owncloud", 243 | }, 244 | }, 245 | { 246 | "name": "redis", 247 | "image": REDIS_IMAGE, 248 | }, 249 | { 250 | "name": "email", 251 | "image": "docker.io/inbucket/inbucket", 252 | }, 253 | { 254 | "name": "selenium", 255 | "image": STANDALONE_CHROME_DEBUG_IMAGE, 256 | }, 257 | ], 258 | "depends_on": [], 259 | "trigger": { 260 | "ref": [ 261 | "refs/heads/master", 262 | "refs/pull/**", 263 | ], 264 | }, 265 | }) 266 | 267 | for t in test: 268 | for p in push: 269 | p["depends_on"].append(t["name"]) 270 | 271 | for p in pre: 272 | t["depends_on"].append(p["name"]) 273 | 274 | for p in post: 275 | p["depends_on"].append(t["name"]) 276 | 277 | for x in push: 278 | p["depends_on"].append(x["name"]) 279 | 280 | return pre + test + push + post 281 | 282 | def documentation(config): 283 | return { 284 | "kind": "pipeline", 285 | "type": "docker", 286 | "name": "documentation", 287 | "platform": { 288 | "os": "linux", 289 | "arch": "amd64", 290 | }, 291 | "steps": [ 292 | { 293 | "name": "link-check", 294 | "image": "ghcr.io/tcort/markdown-link-check:stable", 295 | "commands": [ 296 | "/src/markdown-link-check README.md", 297 | ], 298 | }, 299 | { 300 | "name": "publish", 301 | "image": DOCKER_PUSHRM_IMAGE, 302 | "environment": { 303 | "DOCKER_PASS": { 304 | "from_secret": "public_password", 305 | }, 306 | "DOCKER_USER": { 307 | "from_secret": "public_username", 308 | }, 309 | "PUSHRM_FILE": "README.md", 310 | "PUSHRM_TARGET": "owncloud/${DRONE_REPO_NAME}", 311 | "PUSHRM_SHORT": config["description"], 312 | }, 313 | "when": { 314 | "ref": [ 315 | "refs/heads/master", 316 | ], 317 | }, 318 | }, 319 | ], 320 | "depends_on": [], 321 | "trigger": { 322 | "ref": [ 323 | "refs/heads/master", 324 | "refs/tags/**", 325 | "refs/pull/**", 326 | ], 327 | }, 328 | } 329 | 330 | def rocketchat(config): 331 | return { 332 | "kind": "pipeline", 333 | "type": "docker", 334 | "name": "rocketchat", 335 | "platform": { 336 | "os": "linux", 337 | "arch": "amd64", 338 | }, 339 | "clone": { 340 | "disable": True, 341 | }, 342 | "steps": [ 343 | { 344 | "name": "notify", 345 | "image": "docker.io/plugins/slack", 346 | "failure": "ignore", 347 | "settings": { 348 | "webhook": { 349 | "from_secret": "rocketchat_talk_webhook", 350 | }, 351 | "channel": { 352 | "from_secret": "rocketchat_talk_channel", 353 | }, 354 | }, 355 | }, 356 | ], 357 | "depends_on": [], 358 | "trigger": { 359 | "ref": [ 360 | "refs/heads/master", 361 | "refs/tags/**", 362 | ], 363 | "status": [ 364 | "changed", 365 | "failure", 366 | ], 367 | }, 368 | } 369 | 370 | def download(config): 371 | return [ 372 | { 373 | "name": "download", 374 | "image": "docker.io/plugins/download", 375 | "settings": { 376 | "source": config["version"]["tarball"], 377 | "sha256": config["version"]["tarball_sha"], 378 | "destination": "%s/owncloud.tar.bz2" % config["version"]["base"], 379 | }, 380 | }, 381 | ] 382 | 383 | def prepublish(config): 384 | return [ 385 | { 386 | "name": "prepublish", 387 | "image": DRONE_DOCKER_BUILDX_IMAGE, 388 | "settings": { 389 | "username": { 390 | "from_secret": "internal_username", 391 | }, 392 | "password": { 393 | "from_secret": "internal_password", 394 | }, 395 | "tags": config["internal"], 396 | "dockerfile": "%s/Dockerfile.multiarch" % (config["version"]["base"]), 397 | "repo": "registry.drone.owncloud.com/owncloud/%s" % config["repo"], 398 | "registry": "registry.drone.owncloud.com", 399 | "context": config["version"]["base"], 400 | }, 401 | "environment": { 402 | "BUILDKIT_NO_CLIENT_TOKEN": True, 403 | }, 404 | }, 405 | ] 406 | 407 | def sleep(config): 408 | return [ 409 | { 410 | "name": "sleep", 411 | "image": "docker.io/owncloudci/alpine", 412 | "environment": { 413 | "DOCKER_USER": { 414 | "from_secret": "internal_username", 415 | }, 416 | "DOCKER_PASSWORD": { 417 | "from_secret": "internal_password", 418 | }, 419 | }, 420 | "commands": [ 421 | "regctl registry login registry.drone.owncloud.com --user $DOCKER_USER --pass $DOCKER_PASSWORD", 422 | "retry -- 'regctl image digest registry.drone.owncloud.com/owncloud/%s:%s'" % (config["repo"], config["internal"]), 423 | ], 424 | }, 425 | ] 426 | 427 | # container vulnerability scanning, see: https://github.com/aquasecurity/trivy 428 | def trivy(config): 429 | return [ 430 | { 431 | "name": "trivy-scan", 432 | "image": "ghcr.io/aquasecurity/trivy", 433 | "environment": { 434 | "TRIVY_AUTH_URL": "https://registry.drone.owncloud.com", 435 | "TRIVY_USERNAME": { 436 | "from_secret": "internal_username", 437 | }, 438 | "TRIVY_PASSWORD": { 439 | "from_secret": "internal_password", 440 | }, 441 | "TRIVY_NO_PROGRESS": True, 442 | "TRIVY_IGNORE_UNFIXED": True, 443 | "TRIVY_TIMEOUT": "5m", 444 | "TRIVY_EXIT_CODE": "1", 445 | "TRIVY_DB_SKIP_UPDATE": True, 446 | "TRIVY_SEVERITY": "HIGH,CRITICAL", 447 | "TRIVY_IGNOREFILE": "/drone/src/.trivyignore", 448 | }, 449 | "commands": [ 450 | "pwd", 451 | "ls -la", 452 | "trivy -v", 453 | "trivy image registry.drone.owncloud.com/owncloud/%s:%s" % (config["repo"], config["internal"]), 454 | ], 455 | }, 456 | ] 457 | 458 | def wait_server(config): 459 | return [ 460 | { 461 | "name": "wait-server", 462 | "image": UBUNTU_IMAGE, 463 | "commands": [ 464 | "wait-for-it -t 600 server:8080", 465 | ], 466 | }, 467 | ] 468 | 469 | def wait_email(config): 470 | return [ 471 | { 472 | "name": "wait-email", 473 | "image": UBUNTU_IMAGE, 474 | "commands": [ 475 | "wait-for-it -t 600 email:9000", 476 | ], 477 | }, 478 | ] 479 | 480 | def api(config): 481 | return [ 482 | { 483 | "name": "api-tarball", 484 | "image": "docker.io/plugins/download", 485 | "settings": { 486 | "source": config["version"]["qa"], 487 | "destination": "owncloud-qa.tar.bz2", 488 | }, 489 | }, 490 | { 491 | "name": "extract", 492 | "image": "docker.io/owncloudci/php:%s" % config["version"]["php"], 493 | "commands": [ 494 | "tar -xjf owncloud-qa.tar.bz2 -C /drone/src --strip 1", 495 | ], 496 | }, 497 | { 498 | "name": "version", 499 | "image": "docker.io/owncloudci/php:%s" % config["version"]["php"], 500 | "commands": [ 501 | "cat version.php", 502 | ], 503 | }, 504 | { 505 | "name": "behat", 506 | "image": "docker.io/owncloudci/php:%s" % config["version"]["php"], 507 | "commands": [ 508 | "mkdir -p vendor-bin/behat", 509 | "wget -O vendor-bin/behat/composer.json %s" % config["version"]["behat"], 510 | "cd vendor-bin/behat/ && composer install", 511 | ], 512 | }, 513 | { 514 | "name": "tests", 515 | "image": "docker.io/owncloudci/php:%s" % config["version"]["php"], 516 | "environment": { 517 | "TEST_SERVER_URL": "http://server:8080", 518 | "SKELETON_DIR": "/mnt/data/apps/testing/data/apiSkeleton", 519 | }, 520 | "commands": [ 521 | 'bash tests/acceptance/run.sh --remote --tags "@smokeTest&&~@skip&&~@skipOnDockerContainerTesting%s" --type api --part %d %d' % (extraTestFilterTags(config), config["step"], config["splitAPI"]), 522 | ], 523 | }, 524 | ] 525 | 526 | def ui(config): 527 | return [ 528 | { 529 | "name": "ui-tarball", 530 | "image": "docker.io/plugins/download", 531 | "settings": { 532 | "source": config["version"]["qa"], 533 | "destination": "owncloud-qa.tar.bz2", 534 | }, 535 | }, 536 | { 537 | "name": "extract", 538 | "image": "docker.io/owncloudci/php:%s" % config["version"]["php"], 539 | "commands": [ 540 | "tar -xjf owncloud-qa.tar.bz2 -C /drone/src --strip 1", 541 | ], 542 | }, 543 | { 544 | "name": "version", 545 | "image": "docker.io/owncloudci/php:%s" % config["version"]["php"], 546 | "commands": [ 547 | "cat version.php", 548 | ], 549 | }, 550 | { 551 | "name": "behat", 552 | "image": "docker.io/owncloudci/php:%s" % config["version"]["php"], 553 | "commands": [ 554 | "mkdir -p vendor-bin/behat", 555 | "wget -O vendor-bin/behat/composer.json %s" % config["version"]["behat"], 556 | "cd vendor-bin/behat/ && composer install", 557 | ], 558 | }, 559 | { 560 | "name": "tests", 561 | "image": "docker.io/owncloudci/php:%s" % config["version"]["php"], 562 | "environment": { 563 | "TEST_SERVER_URL": "http://server:8080", 564 | "SKELETON_DIR": "/mnt/data/apps/testing/data/webUISkeleton", 565 | "BROWSER": "chrome", 566 | "SELENIUM_HOST": "selenium", 567 | "SELENIUM_PORT": "4444", 568 | "PLATFORM": "Linux", 569 | "EMAIL_HOST": "email", 570 | "LOCAL_EMAIL_HOST": "email", 571 | }, 572 | "commands": [ 573 | 'bash tests/acceptance/run.sh --remote --tags "@smokeTest&&~@skip&&~@skipOnDockerContainerTesting%s" --type webUI --part %d %d' % (extraTestFilterTags(config), config["step"], config["splitUI"]), 574 | ], 575 | }, 576 | ] 577 | 578 | def tests(config): 579 | return [ 580 | { 581 | "name": "test", 582 | "image": UBUNTU_IMAGE, 583 | "commands": [ 584 | "curl -sSf http://server:8080/status.php", 585 | ], 586 | }, 587 | ] 588 | 589 | def publish(config): 590 | return [ 591 | { 592 | "name": "publish", 593 | "image": DRONE_DOCKER_BUILDX_IMAGE, 594 | "settings": { 595 | "username": { 596 | "from_secret": "public_username", 597 | }, 598 | "password": { 599 | "from_secret": "public_password", 600 | }, 601 | "platforms": [ 602 | "linux/amd64", 603 | "linux/arm64", 604 | ], 605 | "tags": config["version"]["tags"], 606 | "dockerfile": "%s/Dockerfile.multiarch" % (config["version"]["base"]), 607 | "repo": "owncloud/%s" % config["repo"], 608 | "context": config["version"]["base"], 609 | "cache_from": "registry.drone.owncloud.com/owncloud/%s:%s" % (config["repo"], config["internal"]), 610 | "pull_image": False, 611 | }, 612 | "when": { 613 | "ref": [ 614 | "refs/heads/master", 615 | ], 616 | }, 617 | }, 618 | ] 619 | 620 | def cleanup(config): 621 | return [ 622 | { 623 | "name": "cleanup", 624 | "image": "docker.io/owncloudci/alpine", 625 | "failure": "ignore", 626 | "environment": { 627 | "DOCKER_USER": { 628 | "from_secret": "internal_username", 629 | }, 630 | "DOCKER_PASSWORD": { 631 | "from_secret": "internal_password", 632 | }, 633 | }, 634 | "commands": [ 635 | "regctl registry login registry.drone.owncloud.com --user $DOCKER_USER --pass $DOCKER_PASSWORD", 636 | "regctl tag rm registry.drone.owncloud.com/owncloud/%s:%s" % (config["repo"], config["internal"]), 637 | ], 638 | }, 639 | ] 640 | 641 | def lint(config): 642 | return { 643 | "kind": "pipeline", 644 | "type": "docker", 645 | "name": "lint", 646 | "steps": [ 647 | { 648 | "name": "starlark-format", 649 | "image": "docker.io/owncloudci/bazel-buildifier", 650 | "commands": [ 651 | "buildifier -d -diff_command='diff -u' .drone.star", 652 | ], 653 | }, 654 | { 655 | "name": "editorconfig-format", 656 | "image": "docker.io/mstruebing/editorconfig-checker", 657 | }, 658 | ], 659 | "depends_on": [], 660 | "trigger": { 661 | "ref": [ 662 | "refs/heads/master", 663 | "refs/pull/**", 664 | ], 665 | }, 666 | } 667 | 668 | def shellcheck(config): 669 | return [ 670 | { 671 | "name": "shellcheck-%s" % (config["version"]["base"]), 672 | "image": "docker.io/koalaman/shellcheck-alpine:stable", 673 | "commands": [ 674 | "grep -ErlI '^#!(.*/|.*env +)(sh|bash|ksh)' %s/overlay/ | xargs -r shellcheck" % (config["version"]["base"]), 675 | ], 676 | }, 677 | ] 678 | 679 | def extraTestFilterTags(config): 680 | if "version" not in config: 681 | return "" 682 | 683 | if "extraTestFilterTags" not in config["version"]: 684 | return "" 685 | 686 | if (config["version"]["extraTestFilterTags"] == ""): 687 | return "" 688 | else: 689 | return "&&%s" % config["version"]["extraTestFilterTags"] 690 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org/ 2 | 3 | root = true 4 | 5 | [*] 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | charset = utf-8 10 | trim_trailing_whitespace = true 11 | insert_final_newline = true 12 | 13 | [Makefile] 14 | indent_style = tab 15 | indent_size = 4 16 | 17 | [*.star] 18 | indent_style = space 19 | indent_size = 4 20 | 21 | [LICENSE] 22 | indent_size = unset 23 | -------------------------------------------------------------------------------- /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /.github/settings.yml: -------------------------------------------------------------------------------- 1 | --- 2 | repository: 3 | name: server 4 | description: Docker image for ownCloud community edition 5 | topics: docker, owncloud, community-edition 6 | 7 | private: false 8 | has_issues: true 9 | has_projects: false 10 | has_wiki: false 11 | has_downloads: false 12 | 13 | default_branch: master 14 | 15 | allow_squash_merge: true 16 | allow_merge_commit: true 17 | allow_rebase_merge: true 18 | 19 | labels: 20 | - name: bug 21 | color: d73a4a 22 | description: Something isn't working 23 | - name: documentation 24 | color: 0075ca 25 | description: Improvements or additions to documentation 26 | - name: duplicate 27 | color: cfd3d7 28 | description: This issue or pull request already exists 29 | - name: enhancement 30 | color: a2eeef 31 | description: New feature or request 32 | - name: good first issue 33 | color: 7057ff 34 | description: Good for newcomers 35 | - name: help wanted 36 | color: 008672 37 | description: Extra attention is needed 38 | - name: invalid 39 | color: e4e669 40 | description: This doesn't seem right 41 | - name: question 42 | color: d876e3 43 | description: Further information is requested 44 | - name: wontfix 45 | color: ffffff 46 | description: This will not be worked on 47 | 48 | teams: 49 | - name: bot 50 | permission: admin 51 | 52 | branches: 53 | - name: master 54 | protection: 55 | required_pull_request_reviews: 56 | required_approving_review_count: 1 57 | dismiss_stale_reviews: false 58 | require_code_owner_reviews: false 59 | required_status_checks: 60 | strict: false 61 | contexts: 62 | - continuous-integration/drone/pr 63 | enforce_admins: null 64 | restrictions: 65 | apps: 66 | - renovate 67 | users: [] 68 | teams: 69 | - bot 70 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .drone.yml 2 | 3 | owncloud.tar.bz2 4 | -------------------------------------------------------------------------------- /.renovaterc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["github>owncloud-ops/renovate-presets:docker"] 4 | } 5 | -------------------------------------------------------------------------------- /.trivyignore: -------------------------------------------------------------------------------- 1 | # vulnerability is affecting windows only 2 | CVE-2024-51736 3 | # gomplate is not vulnerable - https://github.com/hairyhenderson/gomplate/issues/2323 4 | CVE-2024-45338 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 2025-04-29 4 | 5 | * Changed 6 | * Use ubuntu-22.04 with Freexian PHP 7.4 with owncloud-complete-20250311 10.15.2 7 | 8 | ## 2020-05-25 9 | 10 | * Added 11 | * Add ubuntu-20.04 for owncloud-complete-10.5.0beta1 12 | 13 | ## 2019-10-16 14 | 15 | * Changed 16 | * Switch to single branch development 17 | * Use drone starlark instead of yaml 18 | * Prepare multi architecture support 19 | 20 | ## 2019-07-29 21 | 22 | * Added 23 | * Link to documentation for installation 24 | * Removed 25 | * Drop docker and docker-compose examples 26 | 27 | ## 2018-10-09 28 | 29 | * Changed 30 | * Prepare for new `owncloud/base` image 31 | * Changed port from `80` to `8080` 32 | * Renamed utf8mb4 env variable to new name 33 | * Removed 34 | * Dropped port `443`, use a reverse proxy for SSL 35 | 36 | ## 2018-10-01 37 | 38 | * Added 39 | * Integrate clair vuln checks 40 | * Changed 41 | * Upgrade ownCloud from 10.0.9 to 10.0.10 42 | * Switch base image from xenial to bionic 43 | * Removed 44 | * Dropped matrix builds 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022 ownCloud GmbH 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ownCloud: Server 2 | 3 | [![Build Status](https://drone.owncloud.com/api/badges/owncloud-docker/server/status.svg)](https://drone.owncloud.com/owncloud-docker/server) 4 | [![Docker Hub](https://img.shields.io/docker/v/owncloud/server?logo=docker&label=dockerhub&sort=semver&logoColor=white)](https://hub.docker.com/r/owncloud/server) 5 | [![GitHub contributors](https://img.shields.io/github/contributors/owncloud-docker/server)](https://github.com/owncloud-docker/server/graphs/contributors) 6 | [![Source: GitHub](https://img.shields.io/badge/source-github-blue.svg?logo=github&logoColor=white)](https://github.com/owncloud-docker/server) 7 | [![License: MIT](https://img.shields.io/github/license/owncloud-docker/server)](https://github.com/owncloud-docker/server/blob/master/LICENSE) 8 | 9 | Official [ownCloud](https://owncloud.com) Docker image. It's designed to work with a data volume in the host filesystem and with a standalone MariaDB and Redis container. For a guide how to get started please take a look at our [documentation](https://doc.owncloud.com/server/latest/admin_manual/installation/docker/). 10 | 11 | ## About ownCloud 12 | 13 | ownCloud is an open-source file sync, share and content collaboration software that lets teams work on data easily from anywhere, on any device. It provides access to your data through a web interface, sync clients or WebDAV while providing a platform to view, sync and share across devices easily - all under your control. ownCloud’s open architecture is extensible via a simple but powerful API for applications and plugins and it works with any storage. 14 | 15 | ![Secure content collaboration and filesharing with ownCloud](https://raw.githubusercontent.com/owncloud-docker/server/master/images/Home-UI.png) 16 | 17 | ## Quick reference 18 | 19 | - **Where to file issues:**\ 20 | [owncloud/core](https://github.com/owncloud/core/issues) 21 | 22 | - **Supported architectures:**\ 23 | `amd64`, `arm64v8` 24 | 25 | - **Inherited environments:**\ 26 | [owncloud/ubuntu](https://github.com/owncloud-docker/ubuntu#environment-variables), 27 | [owncloud/php](https://github.com/owncloud-docker/php#environment-variables), 28 | [owncloud/base](https://github.com/owncloud-docker/base#environment-variables) 29 | 30 | ## Docker Tags and respective Dockerfile links 31 | 32 | - [`10.15.0`](https://github.com/owncloud-docker/server/blob/master/v20.04/Dockerfile.multiarch) available as `owncloud/server:10.15.0`, `owncloud/server:10.15`, `owncloud/server:10`, `owncloud/server:latest` 33 | - [`10.14.0`](https://github.com/owncloud-docker/server/blob/master/v20.04/Dockerfile.multiarch) available as `owncloud/server:10.14.0`, 34 | - [`10.13.4`](https://github.com/owncloud-docker/server/blob/master/v20.04/Dockerfile.multiarch) available as `owncloud/server:10.13.4`, `owncloud/server:10.13` 35 | 36 | ## Default volumes 37 | 38 | - `/mnt/data` 39 | 40 | ## Exposed ports 41 | 42 | - 8080 43 | 44 | ## Environment variables 45 | 46 | None 47 | 48 | ## License 49 | 50 | This project is licensed under the MIT License - see the [LICENSE](https://github.com/owncloud-docker/server/blob/master/LICENSE) file for details. 51 | 52 | ## Copyright 53 | 54 | ```Text 55 | Copyright (c) 2022 ownCloud GmbH 56 | ``` 57 | -------------------------------------------------------------------------------- /images/Home-UI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud-docker/server/d0b3b3dbb891cbee0ed280f7a506cf981fab95c7/images/Home-UI.png -------------------------------------------------------------------------------- /v22.04/Dockerfile.multiarch: -------------------------------------------------------------------------------- 1 | FROM docker.io/owncloud/base:22.04@sha256:2ac093d27a9209e7bde42e797811f628ef1ef04966fb8df1b68f276829d5cac5 2 | 3 | LABEL maintainer="ownCloud GmbH " \ 4 | org.opencontainers.image.authors="ownCloud DevOps " \ 5 | org.opencontainers.image.vendor="ownCloud GmbH" \ 6 | org.opencontainers.image.title="ownCloud Server" \ 7 | org.opencontainers.image.description="ownCloud - Secure Collaboration Platform" \ 8 | org.opencontainers.image.url="https://hub.docker.com/r/owncloud/server" \ 9 | org.opencontainers.image.source="https://github.com/owncloud-docker/server" \ 10 | org.opencontainers.image.documentation="https://github.com/owncloud-docker/server" 11 | 12 | ADD owncloud.tar.bz2 /var/www/ 13 | 14 | ADD overlay / 15 | WORKDIR /var/www/owncloud 16 | 17 | RUN find /var/www/owncloud \( \! -user www-data -o \! -group root \) -print0 | xargs -r -0 chown www-data:root && \ 18 | chmod g+w /var/www/owncloud /var/www/owncloud/.htaccess 19 | 20 | VOLUME ["/mnt/data"] 21 | EXPOSE 8080 22 | 23 | ENTRYPOINT ["/usr/bin/entrypoint"] 24 | CMD ["/usr/bin/owncloud", "server"] 25 | -------------------------------------------------------------------------------- /v22.04/overlay/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud-docker/server/d0b3b3dbb891cbee0ed280f7a506cf981fab95c7/v22.04/overlay/.keep --------------------------------------------------------------------------------