https://github.com/owncloud/core
Raw File
Tip revision: f169b07c295d60159b1d53ebbb07fec64e9d2214 authored by Victor Dubiniuk on 12 September 2019, 15:10:14 UTC
Cleanup remote
Tip revision: f169b07
pipeline.libsonnet
local services = {
  email()::
    [{
      name: 'email',
      pull: 'always',
      image: 'mailhog/mailhog:latest',
    }],

  proxy()::
    [{
      name: 'proxy',
      pull: 'always',
      image: 'pottava/proxy',
    environment: {
      PROXY_URL: 'http://server'
    },
    }],

  get(service)::
    if service != '' then $[service]() else [],
};

local externals = {
  webdav(version='')::
    local v = if version != '' then version else 'latest';
    [{
      name: 'webdav',
      image: 'owncloudci/php:' + v,
      pull: 'always',
      environment: {
        APACHE_CONFIG_TEMPLATE: 'webdav',
      },
      command: [
        '/usr/local/bin/apachectl',
        '-D',
        'FOREGROUND',
      ],
    }],

  samba(version='')::
    local v = if version != '' then version else 'latest';
    [{
      name: 'samba',
      image: 'owncloudci/samba:' + v,
      pull: 'always',
      command: [
        '-u',
        'test;test',
        '-s',
        'public;/tmp;yes;no;no;test;none;test',
        '-S',
      ],
    }],

  swift(version='')::
    local v = if version != '' then version else 'latest';
    [{
      name: 'ceph',
      image: 'owncloudci/ceph:' + v,
      pull: 'always',
      environment: {
        KEYSTONE_PUBLIC_PORT: '5034',
        KEYSTONE_ADMIN_USER: 'test',
        KEYSTONE_ADMIN_PASS: 'testing',
        KEYSTONE_ADMIN_TENANT: 'testtenant',
        KEYSTONE_ENDPOINT_REGION: 'testregion',
        KEYSTONE_SERVICE: 'testceph',
        OSD_SIZE: '500',
      },
    }],

  windows(version='')::
    [],

  get(external, version='')::
    if external != '' then $[external](version) else [],
};

local objects = {
  scality(version='')::
    local v = if version != '' then version else 'latest';

    [{
      name: 'scality',
      image: 'owncloudci/scality-s3server:' + v,
      pull: 'always',
      environment: {
        HOST_NAME: 'scality',
      },
    }],

  swift(version='')::
    [],

  get(object, version='')::
    if object != '' then $[object](version) else [],
};

local databases = {
  mariadb(version='')::
    local v = if version != '' then version else '10.2';
    [{
      name: 'mariadb',
      image: 'mariadb:' + v,
      environment: {
        MYSQL_USER: 'owncloud',
        MYSQL_PASSWORD: 'owncloud',
        MYSQL_DATABASE: 'owncloud',
        MYSQL_ROOT_PASSWORD: 'owncloud',
      },
    }],

  mysql(version='')::
    local v = if version != '' then version else '5.5';
    [{
      name: 'mysql',
      image: 'mysql:' + v,
      environment: {
        MYSQL_USER: 'owncloud',
        MYSQL_PASSWORD: 'owncloud',
        MYSQL_DATABASE: 'owncloud',
        MYSQL_ROOT_PASSWORD: 'owncloud',
      },
      [if version == '8.0' then 'command']: ['--default-authentication-plugin=mysql_native_password'],
    }],

  postgres(version='')::
    local v = if version != '' then version else '9.4';
    [{
      name: 'postgres',
      image: 'postgres:' + v,
      environment: {
        POSTGRES_USER: 'owncloud',
        POSTGRES_PASSWORD: 'owncloud',
        POSTGRES_DB: 'owncloud',
      },
    }],

  oracle(version='')::
    [{
      name: 'oracle',
      image: 'deepdiver/docker-oracle-xe-11g:2.0',
      environment: {
        ORACLE_DISABLE_ASYNCH_IO: true,
      },
    }],

  sqlite(version='')::
    [],

  get(db, version)::
    if db != '' then $[db](version) else [],
};

local browsers = {
  chrome: [{
    name: 'chrome',
    image: 'selenium/standalone-chrome-debug:3.141.59-oxygen',
    pull: 'always',
    environment: {
      JAVA_OPTS: '-Dselenium.LOGGER.level=WARNING',
    },
  }],

  firefox: [{
    name: 'firefox',
    image: 'selenium/standalone-firefox-debug:3.8.1',
    pull: 'always',
    environment: {
      JAVA_OPTS: '-Dselenium.LOGGER.level=WARNING',
      SE_OPTS: '-enablePassThrough false',
    },
  }],

  get(browser)::
    if browser != '' then $[browser] else [],
};

local suites = {
  phpunit(image='', db='', external='', object='', suite='', browser='', filter='', num='', proto='https', coverage=false, server='server')::
    [{
      name: 'phpunit-tests',
      image: image,
      pull: 'always',
      environment: {
        FILES_EXTERNAL_TYPE: external,
        COVERAGE: coverage,
        PRIMARY_OBJECTSTORE: if object == 'scality' then 'files_primary_s3' else if object == 'swift' then 'swift' else '',
        DB_TYPE: db,
      },
      commands: [
        'su-exec www-data bash tests/drone/test-phpunit.sh',
      ],
    }],

  webui(image='', db='', external='', object='', suite='', browser='', filter='', num='', proto='https', coverage=false, server='server')::
    [{
      name: 'webui-acceptance-tests',
      image: image,
      pull: 'always',
      environment: {
        TEST_SERVER_URL: proto + '://' + server,
        BEHAT_FILTER_TAGS: filter,
        BEHAT_SUITE: suite,
        BROWSER: browser,
        SELENIUM_HOST: browser,
        SELENIUM_PORT: 4444,
        PLATFORM: 'Linux',
        MAILHOG_HOST: 'email',
        [if num != '' then 'DIVIDE_INTO_NUM_PARTS']: std.split(num, '/')[1],
        [if num != '' then 'RUN_PART']: std.split(num, '/')[0],
      },
      commands: [
        'touch /drone/saved-settings.sh',
        '. /drone/saved-settings.sh',
        'make test-acceptance-webui TESTING_REMOTE_SYSTEM=true',
      ],
    }],

  api(image='', db='', external='', object='', suite='', browser='', filter='', num='', proto='https', coverage=false, server='server')::
    [{
      name: 'api-acceptance-tests',
      image: image,
      pull: 'always',
      environment: {
        TEST_SERVER_URL: proto + '://' + server,
        BEHAT_FILTER_TAGS: filter,
        BEHAT_SUITE: suite,
        [if num != '' then 'DIVIDE_INTO_NUM_PARTS']: std.split(num, '/')[1],
        [if num != '' then 'RUN_PART']: std.split(num, '/')[0],
      },
      commands: [
        'touch /drone/saved-settings.sh',
        '. /drone/saved-settings.sh',
        'make test-acceptance-api TESTING_REMOTE_SYSTEM=true',
      ],
    }],

  cli(image='', db='', external='', object='', suite='', browser='', filter='', num='', proto='https', coverage=false, server='server')::
    [{
      name: 'cli-acceptance-tests',
      image: image,
      pull: 'always',
      environment: {
        MAILHOG_HOST: 'email',
        TEST_SERVER_URL: proto + '://' + server,
        BEHAT_FILTER_TAGS: filter,
        BEHAT_SUITE: suite,
        [if num != '' then 'DIVIDE_INTO_NUM_PARTS']: std.split(num, '/')[1],
        [if num != '' then 'RUN_PART']: std.split(num, '/')[0],
      },
      commands: [
        'touch /drone/saved-settings.sh',
        '. /drone/saved-settings.sh',
        'make test-acceptance-cli TESTING_REMOTE_SYSTEM=true',
      ],
    }],

  loc(image='', db='', external='', object='', suite='', browser='', filter='', num='', proto='https', coverage=false, server='server')::
    [{
      name: 'local-acceptance-tests',
      image: image,
      pull: 'always',
      environment: {
        MAILHOG_HOST: 'email',
        TEST_SERVER_URL: proto + '://' + server,
        BEHAT_FILTER_TAGS: filter,
        BEHAT_SUITE: suite,
        [if num != '' then 'DIVIDE_INTO_NUM_PARTS']: std.split(num, '/')[1],
        [if num != '' then 'RUN_PART']: std.split(num, '/')[0],
      },
      commands: [
        'touch /drone/saved-settings.sh',
        '. /drone/saved-settings.sh',
        'su-exec www-data ./tests/acceptance/run.sh --type cli',
      ],
    }],

  get(type, image='', db='', external='', object='', suite='', browser='', filter='', num='', proto='https', coverage=false, server='server')::
    if type != '' then $[type](image, db, external, object, suite, browser, filter, num, proto, coverage, server) else [],
};

{
  install(trigger={}, depends_on=[])::
    {
      kind: 'pipeline',
      name: 'install-dependencies',
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:7.1'),
        $.vendorbin(image='owncloudci/php:7.1'),
        $.yarn(image='owncloudci/php:7.1'),
        $.cache({ rebuild: true, mount: ['.cache'] }),
        $.cache({ flush: true, flush_age: 14 }),
      ],
      trigger: trigger,
      depends_on: depends_on,
    },

  standard(trigger={}, depends_on=[])::
    {
      kind: 'pipeline',
      name: 'coding-standard',
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:7.1'),
        $.vendorbin(image='owncloudci/php:7.1'),
        $.yarn(image='owncloudci/php:7.1'),
        {
          name: 'php-style',
          image: 'owncloudci/php:7.3',
          pull: 'always',
          commands: [
            'make test-php-style',
          ],
        },
      ],
      trigger: trigger,
      depends_on: depends_on,
    },

  phan(php='', trigger={}, depends_on=[])::
    {
      kind: 'pipeline',
      name: 'phan-php' + php,
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:' + php),
        $.vendorbin(image='owncloudci/php:' + php),
        $.yarn(image='owncloudci/php:' + php),
      ] + $.server(image='owncloudci/php:' + php, db='sqlite') + [
        {
          name: 'php-phan',
          image: 'owncloudci/php:' + php,
          pull: 'always',
          commands: [
            'make test-php-phan',
          ],
        },
      ],
      trigger: trigger,
      depends_on: depends_on,
    },

  stan(php='', trigger={}, depends_on=[])::
    {
      kind: 'pipeline',
      name: 'stan-php' + php,
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:' + php),
        $.vendorbin(image='owncloudci/php:' + php),
        $.yarn(image='owncloudci/php:' + php),
      ] + $.server(image='owncloudci/php:' + php, db='sqlite') + [
        {
          name: 'php-phpstan',
          image: 'owncloudci/php:' + php,
          pull: 'always',
          commands: [
            'make test-php-phpstan',
          ],
        },
      ],
      trigger: trigger,
      depends_on: depends_on,
    },

  javascript(trigger={}, depends_on=[])::
    {
      kind: 'pipeline',
      name: 'test-javascript',
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:7.1'),
        $.vendorbin(image='owncloudci/php:7.1'),
        $.yarn(image='owncloudci/php:7.1'),
        {
          name: 'test-js',
          image: 'owncloudci/php:7.1',
          pull: 'always',
          commands: [
            'make test-js',
          ],
        },
        {
          name: 'coverage-upload',
          image: 'plugins/codecov:2',
          pull: 'always',
          environment: {
            CODECOV_TOKEN: {
              from_secret: 'codecov_token',
            },
          },
          settings: {
            flags: [
              'javascript',
            ],
            paths: [
              'tests/output/coverage',
            ],
            files: [
              '*.xml',
            ],
          },
          when: {
            instance: [
              'drone.owncloud.services',
              'drone.owncloud.com',
            ],
          },
        },
      ],
      trigger: trigger,
      depends_on: depends_on,
    },

  litmus(php='', db='', trigger={}, depends_on=[])::
    local database_split = std.split(db, ':');
    local database_name = database_split[0];
    local database_version = if std.length(database_split) == 2 then database_split[1] else '';

    {
      kind: 'pipeline',
      name: 'litmus-php' + php,
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:' + php),
        $.vendorbin(image='owncloudci/php:' + php),
        $.yarn(image='owncloudci/php:' + php),
      ] + $.server(image='owncloudci/php:' + php, db=database_name) + [
        {
          name: 'tech-preview',
          image: 'owncloudci/php:' + php,
          pull: 'always',
          commands: [
            'php occ config:system:set dav.enable.tech_preview --value=true --type boolean',
          ],
        },
        {
          name: 'setup-storage',
          image: 'owncloudci/php:' + php,
          pull: 'always',
          environment: {
            OC_PASS: '123456',
          },
          commands: [
            'mkdir -p /drone/src/work/local_storage',
            'php occ app:enable files_external',
            'php occ config:system:set files_external_allow_create_new_local --value=true',
            'php occ config:app:set core enable_external_storage --value=yes',
            'php occ files_external:create local_storage local null::null -c datadir=/drone/src/work/local_storage',
            'php occ user:add --password-from-env user1',
          ],
        },
      ] + $.permissions(image='owncloudci/php:' + php) + [
        {
          name: 'create-share',
          image: 'owncloudci/php:' + php,
          pull: 'always',
          commands: [
            'curl -k -s -u user1:123456 -X MKCOL "https://server/remote.php/webdav/new_folder"',
            'curl -k -s -u user1:123456 "https://server/ocs/v2.php/apps/files_sharing/api/v1/shares" --data "path=/new_folder&shareType=0&permissions=15&name=new_folder&shareWith=admin"',
            'echo -n "PUBLIC_TOKEN=" > .env',
            'curl -k -s -u user1:123456 "https://server/ocs/v2.php/apps/files_sharing/api/v1/shares" --data "path=/new_folder&shareType=3&permissions=15&name=new_folder" | grep token | cut -d">" -f2 | cut -d"<" -f1 >> .env'
          ],
        },
      ] + $.logging(image='owncloudci/php:' + php) + [
        {
          name: test.name,
          image: 'owncloud/litmus:latest',
          pull: 'always',
          environment: {
            LITMUS_USERNAME: 'admin',
            LITMUS_PASSWORD: 'admin',
            TESTS: test.tests,
          },
          commands: [
            'source .env',
            'export LITMUS_URL=\'https://server/remote.php' + test.endpoint  + (if test.name == 'public-share' then '\'$PUBLIC_TOKEN' else '\''),
            '/usr/local/bin/litmus-wrapper'
          ]
        }
        for test in [
          {
            name: 'old-endpoint',
            endpoint: '/webdav',
            tests: 'basic copymove props locks http'
          },
          {
            name: 'new-endpoint',
            endpoint: '/dav/files/admin',
            tests: 'basic copymove props locks http'
          },
          {
            name: 'new-mount',
            endpoint: '/dav/files/admin/local_storage/',
            tests: 'basic copymove props locks http'
          },
          {
            name: 'old-mount',
            endpoint: '/webdav/local_storage/',
            tests: 'basic copymove props locks http'
          },
          {
            name: 'new-shared',
            endpoint: '/dav/files/admin/new_folder/',
            tests: 'basic copymove props locks http'
          },
          {
            name: 'old-shared',
            endpoint: '/webdav/new_folder/',
            tests: 'basic copymove props locks http'
          },
          {
            name: 'public-share',
            endpoint: '/dav/public-files/',
            tests: 'basic copymove http'
          },
        ]
      ],
      services: $.owncloud(image='owncloudci/php:' + php, basename='server', root='/drone/src') + databases.get(database_name, database_version),
      trigger: trigger,
      depends_on: depends_on,
    },

  dav(php='', db='', suite='', trigger={}, depends_on=[])::
    local database_split = std.split(db, ':');
    local database_name = database_split[0];
    local database_version = if std.length(database_split) == 2 then database_split[1] else '';

    {
      kind: 'pipeline',
      name: (if std.endsWith(suite, '-old-endpoint') then std.strReplace(suite, '-old-endpoint', '-old') else suite + '-new') + '-php' + php + '-' + std.join('', database_split),
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:' + php),
        $.vendorbin(image='owncloudci/php:' + php),
        $.yarn(image='owncloudci/php:' + php),
      ] + $.server(image='owncloudci/php:' + php, db=database_name) + [
        {
          name: 'dav-install',
          image: 'owncloudci/php:' + php,
          pull: 'always',
          commands: [
            'bash apps/dav/tests/ci/' + suite + '/install.sh',
          ],
        },
      ] + $.permissions(image='owncloudci/php:' + php) + $.logging(image='owncloudci/php:' + php) + [
        {
          name: 'dav-test',
          image: 'owncloudci/php:' + php,
          pull: 'always',
          commands: [
            'bash apps/dav/tests/ci/' + suite + '/script.sh',
          ],
        },
      ],
      services: databases.get(database_name, database_version),
      trigger: trigger,
      depends_on: depends_on,
    },

  phpunit(php='', db='', coverage=false, external='', object='', proto='https', trigger={}, depends_on=[])::
    local database_split = std.split(db, ':');
    local database_name = database_split[0];
    local database_version = if std.length(database_split) == 2 then database_split[1] else '';

    {
      kind: 'pipeline',
      name: 'phpunit-php' + php + '-' + std.join('', database_split) + (if external != '' then '-external-' + external else '') + (if object != '' then '-object-' + object else ''),
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:' + php),
        $.vendorbin(image='owncloudci/php:' + php),
        $.yarn(image='owncloudci/php:' + php),
      ]
      + $.server(image='owncloudci/php:' + php, db=database_name)
      + (if object == 'scality' then $.primarys3app(image='owncloudci/php:' + php, object=object) else [])
      + $.permissions(image='owncloudci/php:' + php, name='owncloud', path='/drone/src')
      + $.logging(image='owncloudci/php:' + php, name='owncloud-logfile', file='/drone/src/data/owncloud.log') +
      + suites.get(image='owncloudci/php:' + php, type='phpunit', coverage=coverage, db=database_name, external=external, object=object, proto=proto),
      services: externals.get(external) + objects.get(object) + databases.get(database_name, database_version),
      trigger: trigger,
      depends_on: depends_on,
    },

  behat(php='', db='', type='', browser='', suite='', filter='', num='', notification=false, proxy=false, email=false, federated='', federatedphp='', proto='https', proxy=false, trigger={}, depends_on=[])::
    local database_split = std.split(db, ':');
    local database_name = database_split[0];
    local database_version = if std.length(database_split) == 2 then database_split[1] else '';
    local phpfederated = if federatedphp == '' then php else federatedphp;

    {
      kind: 'pipeline',
      name: 'behat' + (if browser != '' then '-' + browser else '-headless') + (if federated == 'daily-master-qa' then '-master-qa-fed'  else (if federated != '' then '-' + federated + '-fed' else '')) + (if suite != '' then '-' + suite else '') + (if proxy == true then '-' + 'proxy' else '') + (if num != '' then '-' + std.join('-of-', std.split(num, "/")) else ''),
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      workspace: {
        base: '/drone',
        path: 'src',
      },
      steps: [
        $.cache({ restore: true }),
        $.composer(image='owncloudci/php:' + php),
        $.vendorbin(image='owncloudci/php:' + php),
        $.yarn(image='owncloudci/php:' + php),
      ]
      + $.server(image='owncloudci/php:' + php, db=database_name, federated=federated, proxy=proxy)
      + $.testingapp(image='owncloudci/php:' + php)
      + (if notification then $.notificationsapp(image='owncloudci/php:' + php) else [])
      + $.permissions(image='owncloudci/php:' + php, name='owncloud', path='/drone/src')
      + $.logging(image='owncloudci/php:' + php, name='owncloud-logfile', file='/drone/src/data/owncloud.log')
      + (if federated != '' then $.federated(image='owncloudci/php:' + phpfederated, version=federated, proto=proto) + $.permissions(image='owncloudci/php:' + phpfederated, name='federated', path='/drone/federated') + $.logging(image='owncloudci/php:' + phpfederated, name='federated-logfile', file='/drone/federated/data/owncloud.log') else [])
      + suites.get(image='owncloudci/php:' + php, type=type, suite=suite, browser=browser, filter=filter, num=num, proto=proto, server=(if proxy then 'proxy' else 'server')),
      services: $.owncloud(image='owncloudci/php:' + php, basename='server', root='/drone/src', proto=proto) + (if federated != '' then $.owncloud(image='owncloudci/php:' + phpfederated, basename='federated', root='/drone/federated', proto=proto) else []) + browsers.get(browser) + databases.get(database_name, database_version) + (if email then services.get('email') else []) + (if proxy then services.get('proxy') else []),
      trigger: trigger,
      depends_on: depends_on,
    },

  notify(trigger={}, depends_on=[])::
    local limited = {
      ref: std.filter(function(r) std.startsWith(r, 'refs/heads/') || std.startsWith(r, 'refs/tags/'), trigger.ref),
      status: ['failure']
    };

    {
      kind: 'pipeline',
      name: 'chat-notifications',
      platform: {
        os: 'linux',
        arch: 'amd64',
      },
      clone: {
        disable: true,
      },
      steps: [
        {
          name: 'notify',
          image: 'plugins/slack:1',
          settings: {
            webhook: {
              from_secret: 'public_rocketchat',
            },
            channel: 'server',
          },
        },
      ],
      trigger: std.mergePatch(trigger, limited),
      depends_on: depends_on,
    },

  cache(settings={})::
    local step_name = 'cache-' + if 'restore' in settings then 'restore' else if 'rebuild' in settings then 'rebuild' else if 'flush' in settings then 'flush' else 'unknown';

    {
      name: step_name,
      image: 'plugins/s3-cache:1',
      pull: 'always',
      settings: {
        endpoint: {
          from_secret: 'cache_s3_endpoint',
        },
        access_key: {
          from_secret: 'cache_s3_access_key',
        },
        secret_key: {
          from_secret: 'cache_s3_secret_key',
        },
      } + settings,
      when: {
        instance: [
          'drone.owncloud.services',
          'drone.owncloud.com',
        ],
      } + if std.objectHas(settings, 'restore') then {} else { event: ['push'] },
    },

  yarn(image='owncloudci/php:7.1')::
    {
      name: 'yarn-install',
      image: image,
      pull: 'always',
      environment: {
        NPM_CONFIG_CACHE: '/drone/src/.cache/npm',
        YARN_CACHE_FOLDER: '/drone/src/.cache/yarn',
        bower_storage__packages: '/drone/src/.cache/bower',
      },
      commands: [
        'make install-nodejs-deps',
      ],
    },

  composer(image='owncloudci/php:7.1')::
    {
      name: 'composer-install',
      image: image,
      pull: 'always',
      environment: {
        COMPOSER_HOME: '/drone/src/.cache/composer',
      },
      commands: [
        'make install-composer-deps',
      ],
    },

  vendorbin(image='owncloudci/php:7.1')::
    {
      name: 'vendorbin-install',
      image: image,
      pull: 'always',
      environment: {
        COMPOSER_HOME: '/drone/src/.cache/composer',
      },
      commands: [
        'make vendor-bin-deps',
      ],
    },

  testingapp(image='owncloudci/php:7.1')::
    [{
      name: 'testing-application',
      image: image,
      pull: 'always',
      commands: [
        'git clone https://github.com/owncloud/testing.git /drone/src/apps/testing',
        'cd /drone/src/apps/testing',
        'composer install',
        'cd /drone/src',
        'php occ a:l',
        'php occ a:e testing',
        'php occ a:l',
      ],
    }],

  primarys3app(image='owncloudci/php:7.1', object='')::
    [{
      name: 'primarys3-application',
      image: image,
      pull: 'always',
      commands: [
        'git clone https://github.com/owncloud/files_primary_s3.git /drone/src/apps/files_primary_s3',
        'cd /drone/src/apps/files_primary_s3',
        'composer install',
        'cd /drone/src',
        'php occ a:l',
        'php occ a:e files_primary_s3',
        'php occ a:l',
      ],
    }, {
      name: 'primarys3-prepare',
      image: image,
      pull: 'always',
      commands: [
        'cp /drone/src/apps/files_primary_s3/tests/drone/' + object + '.config.php /drone/src/config',
        'php ./occ s3:create-bucket owncloud --accept-warning',
      ],
    }],

  notificationsapp(image='owncloudci/php:7.1')::
    [{
      name: 'notifications-application',
      image: image,
      pull: 'always',
      commands: [
        'git clone https://github.com/owncloud/notifications.git /drone/src/apps/notifications',
        'cd /drone/src/apps/notifications',
        'composer install',
        'cd /drone/src',
        'php occ a:l',
        'php occ a:e notifications',
        'php occ a:l',
      ],
    }],

  owncloud(image='owncloudci/php:7.1', basename='server', root='/drone/src', proto='https')::
    [{
      name: basename,
      image: image,
      pull: 'always',
      environment: {
        APACHE_WEBROOT: root,
      } + if proto == 'https' then {
        APACHE_CONFIG_TEMPLATE: 'ssl',
        APACHE_SSL_CERT_CN: basename,
        APACHE_SSL_CERT: '/drone/' + basename + '.crt',
        APACHE_SSL_KEY: '/drone/' + basename + '.key',
      } else {},
      command: [
        '/usr/local/bin/apachectl',
        '-e',
        'debug',
        '-D',
        'FOREGROUND',
      ],
    }],

  server(image='owncloudci/php:7.1', db='', federated='', proxy=false)::
    [{
      name: 'install-server',
      image: image,
      pull: 'always',
      proxy: proxy,
      federated: federated,
      environment: {
        DB_TYPE: db,
      },
      commands: [
        'bash tests/drone/install-server.sh',
        'php occ a:l',
        'php occ config:system:set trusted_domains 1 --value=server',
      ] + (if federated != '' then ['php occ config:system:set trusted_domains 2 --value=federated'] else []) + [
        'php occ log:manage --level 2',
        'php occ config:list',
        'php occ security:certificates:import /drone/server.crt',
      ] + (if federated != '' then ['php occ security:certificates:import /drone/federated.crt'] else []) + [
        'php occ security:certificates',
      ] + (if proxy then ['php occ config:system:set trusted_domains 3 --value=proxy'] else []),
    }],

  federated(image='owncloudci/php:7.1', version='', proto='https')::
    [{
      name: 'install-federated',
      image: 'owncloudci/core',
      pull: 'always',
      settings: {
        exclude: 'apps/testing',
        version: version,
        core_path: '/drone/federated',
      },
    }, {
      name: 'configure-federated',
      image: image,
      pull: 'always',
      commands: [
        'cd /drone/federated',
        'php occ a:l',
        'php occ a:e testing',
        'php occ a:l',
        'php occ config:system:set trusted_domains 1 --value=server',
        'php occ config:system:set trusted_domains 2 --value=federated',
        'php occ log:manage --level 2',
        'php occ config:list',
        'echo "export TEST_SERVER_FED_URL=' + proto + '://federated" > /drone/saved-settings.sh',
        'php occ security:certificates:import /drone/server.crt',
        'php occ security:certificates:import /drone/federated.crt',
        'php occ security:certificates',
      ],
    }],

  permissions(image='owncloudci/php:7.1', name='owncloud', path='/drone/src')::
    [{
      name: name + '-permissions',
      image: image,
      pull: 'always',
      commands: [
        'chown www-data -R ' + path,
      ],
    }],

  logging(image='owncloudci/php:7.1', name='owncloud-logfile', file='data/owncloud.log')::
    [{
      name: name,
      image: image,
      pull: 'always',
      detach: true,
      commands: [
        'tail -f ' + file,
      ],
    }],
}
back to top