diff --git a/Dockerfile b/Dockerfile index 8047e697..e471c352 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,10 +11,26 @@ FROM us-central1-docker.pkg.dev/skyviewer/public-images/craft-base-image:$BASE_T LABEL maintainer="erosas@lsst.org" USER root + +# Beginning of supervisord code (requires root user) +RUN apt-get update && apt-get -qq install vim python3.10 pip +RUN pip install supervisor +#COPY queue-runner.conf . +#RUN supervisord -c supervisord.conf +#RUN echo " " > supervisord.conf && cat queue-runner.conf > supervisord.conf +# End of supervisord code + # Copy in custom code from the host machine. WORKDIR /var/www/html COPY --chown=www-data:www-data api/ ./ + + + COPY --from=vendor --chown=www-data:www-data /app/vendor ./vendor RUN mkdir /var/secrets && [ -d ./storage ] || mkdir storage +#RUN supervisord + USER www-data + +#CMD ["supervisord"] \ No newline at end of file diff --git a/api/composer.json b/api/composer.json index 589afa5a..d010d6e3 100755 --- a/api/composer.json +++ b/api/composer.json @@ -9,6 +9,7 @@ "craftcms/google-cloud": "^2.0.0", "craftcms/redactor": "3.0.4", "jamesedmonston/graphql-authentication": "2.4.0", + "lsst-epo/canto-dam-assets": "^1.0", "lsst/canto-dam-integrator": "dev-EPO-7854#v0.3.2", "rynpsc/craft-phone-number": "^2.1.0", "sebastianlenz/linkfield": "^2.1.4", @@ -23,6 +24,10 @@ "type": "vcs", "url": "https://github.com/lsst-epo/craft-canto-dam-integrator.git" }, + { + "type": "path", + "url": "plugins/canto-dam-assets" + }, { "type": "path", "url": "plugins/nextbuilds" diff --git a/api/composer.lock b/api/composer.lock index 394766d3..1bca492e 100644 --- a/api/composer.lock +++ b/api/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f6b92ec4e94f92aab0be7b5f5027bb99", + "content-hash": "660f7a89822d3e91e2bef2f80c31d344", "packages": [ { "name": "abraham/twitteroauth", @@ -3429,6 +3429,63 @@ }, "time": "2022-02-24T18:45:07+00:00" }, + { + "name": "lsst-epo/canto-dam-assets", + "version": "1.0.0", + "dist": { + "type": "path", + "url": "plugins/canto-dam-assets", + "reference": "a7351e63f1b5ab1937ca79c0f59a66c9848f0d84" + }, + "require": { + "craftcms/cms": "^4.4.0", + "nystudio107/craft-plugin-vite": "^4.0.0", + "php": ">=8.0.2" + }, + "require-dev": { + "craftcms/ecs": "dev-main", + "craftcms/phpstan": "dev-main" + }, + "type": "craft-plugin", + "extra": { + "handle": "_canto-dam-assets", + "name": "Canto DAM Assets", + "developer": "nystudio107", + "documentationUrl": "https://github.com/lsst-epo/canto-dam-assets/blob/develop-v4/README.md", + "class": "lsst\\cantodamassets\\CantoDamAssets" + }, + "autoload": { + "psr-4": { + "lsst\\cantodamassets\\": "src/" + } + }, + "scripts": { + "check-cs": [ + "ecs check --ansi" + ], + "fix-cs": [ + "ecs check --ansi --fix" + ], + "phpstan": [ + "phpstan --memory-limit=1G" + ] + }, + "authors": [ + { + "name": "nystudio107", + "homepage": "https://nystudio107.com" + } + ], + "description": "This Craft CMS plugin adds a Field Type with GraphQL support for the Canto Digital Asset Management (DAM) web system", + "support": { + "docs": "https://github.com/lsst-epo/canto-dam-assets/blob/develop-v4/README.md", + "issues": "https://github.com/lsst-epo/canto-dam-assets/issues", + "source": "https://github.com/lsst-epo/canto-dam-assets/" + }, + "transport-options": { + "relative": true + } + }, { "name": "lsst/canto-dam-integrator", "version": "dev-EPO-7854", @@ -3704,6 +3761,58 @@ }, "time": "2021-06-14T00:11:39+00:00" }, + { + "name": "nystudio107/craft-plugin-vite", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/nystudio107/craft-plugin-vite.git", + "reference": "eb05b1cc7dc9eeecbdfe8cd3cd3d119e83c62619" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nystudio107/craft-plugin-vite/zipball/eb05b1cc7dc9eeecbdfe8cd3cd3d119e83c62619", + "reference": "eb05b1cc7dc9eeecbdfe8cd3cd3d119e83c62619", + "shasum": "" + }, + "require": { + "craftcms/cms": "^4.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "nystudio107\\pluginvite\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "nystudio107", + "homepage": "https://nystudio107.com" + } + ], + "description": "Plugin Vite is the conduit between Craft CMS plugins and Vite, with manifest.json & HMR support", + "keywords": [ + "craftcms", + "plugin", + "vite" + ], + "support": { + "docs": "https://github.com/nystudio107/craft-plugin-vite/blob/v1/README.md", + "issues": "https://github.com/nystudio107/craft-plugin-vite/issues", + "source": "https://github.com/nystudio107/craft-plugin-vite/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/khalwat", + "type": "github" + } + ], + "time": "2023-01-25T21:09:10+00:00" + }, { "name": "paragonie/constant_time_encoding", "version": "v2.6.3", @@ -7794,5 +7903,5 @@ "platform-overrides": { "php": "8.1.10" }, - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.1.0" } diff --git a/api/config/project/fields/cantoDamAsset--676da0d6-dc63-48fd-a5cd-7253c956974c.yaml b/api/config/project/fields/cantoDamAsset--676da0d6-dc63-48fd-a5cd-7253c956974c.yaml new file mode 100644 index 00000000..a0322c2d --- /dev/null +++ b/api/config/project/fields/cantoDamAsset--676da0d6-dc63-48fd-a5cd-7253c956974c.yaml @@ -0,0 +1,14 @@ +columnSuffix: vwsjafwg +contentColumnType: + - 'cantoId:string' + - 'cantoAlbumId:string' + - 'cantoAssetData:text' + - 'cantoAlbumData:string' +fieldGroup: df8c8d8a-c7d1-45bf-b551-ef790a5b59ad # Callouts +handle: cantoDamAsset +instructions: null +name: 'Canto DAM Asset' +searchable: false +translationKeyFormat: null +translationMethod: none +type: lsst\cantodamassets\fields\CantoDamAsset diff --git a/api/config/project/project.yaml b/api/config/project/project.yaml index 515931f7..3ad94882 100644 --- a/api/config/project/project.yaml +++ b/api/config/project/project.yaml @@ -1,4 +1,4 @@ -dateModified: 1691608933 +dateModified: 1692903024 email: fromEmail: $EMAIL_FROM_ADDRESS fromName: $EMAIL_SENDER_NAME @@ -220,6 +220,7 @@ meta: 635a4a93-f10b-4d3c-bd44-2ea1474ad4cb: 'Vertical Alignment' # Vertical Alignment 644c6b87-ac0c-4cdf-88be-744a5ee684bb: Description # Description 657b9edd-b6d3-4b7f-af89-36117c5d98a8: 'Rich Text Description' # Rich Text Description + 676da0d6-dc63-48fd-a5cd-7253c956974c: 'Canto DAM Asset' # Canto DAM Asset 753b10b6-e9e6-44f5-a9d9-4a07788733e1: 'Content Ratio' # Content Ratio 824d9ca2-e755-4e41-8f6a-18e573fec8e4: 'News Posts' # News Posts 831db889-442e-4553-9076-fc3bc2843c8c: 'Hide title' # Hide title diff --git a/api/plugins/canto-dam-assets b/api/plugins/canto-dam-assets new file mode 160000 index 00000000..a7351e63 --- /dev/null +++ b/api/plugins/canto-dam-assets @@ -0,0 +1 @@ +Subproject commit a7351e63f1b5ab1937ca79c0f59a66c9848f0d84 diff --git a/api/supervisord.conf b/api/supervisord.conf new file mode 100644 index 00000000..2cd789ef --- /dev/null +++ b/api/supervisord.conf @@ -0,0 +1,179 @@ +; Sample supervisor config file. +; +; For more information on the config file, please see: +; http://supervisord.org/configuration.html +; +; Notes: +; - Shell expansion ("~" or "$HOME") is not supported. Environment +; variables can be expanded using this syntax: "%(ENV_HOME)s". +; - Quotes around values are not supported, except in the case of +; the environment= options as shown below. +; - Comments must have a leading space: "a=b ;comment" not "a=b;comment". +; - Command will be truncated if it looks like a config file comment, e.g. +; "command=bash -c 'foo ; bar'" will truncate to "command=bash -c 'foo ". +; +; Warning: +; Paths throughout this example file use /tmp because it is available on most +; systems. You will likely need to change these to locations more appropriate +; for your system. Some systems periodically delete older files in /tmp. +; Notably, if the socket file defined in the [unix_http_server] section below +; is deleted, supervisorctl will be unable to connect to supervisord. + +[unix_http_server] +file=/tmp/supervisor.sock ; the path to the socket file +;chmod=0700 ; socket file mode (default 0700) +;chown=nobody:nogroup ; socket file uid:gid owner +;username=user ; default is no username (open server) +;password=123 ; default is no password (open server) + +; Security Warning: +; The inet HTTP server is not enabled by default. The inet HTTP server is +; enabled by uncommenting the [inet_http_server] section below. The inet +; HTTP server is intended for use within a trusted environment only. It +; should only be bound to localhost or only accessible from within an +; isolated, trusted network. The inet HTTP server does not support any +; form of encryption. The inet HTTP server does not use authentication +; by default (see the username= and password= options to add authentication). +; Never expose the inet HTTP server to the public internet. + +;[inet_http_server] ; inet (TCP) server disabled by default +;port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface +;username=user ; default is no username (open server) +;password=123 ; default is no password (open server) + +[supervisord] +logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log +logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB +logfile_backups=10 ; # of main logfile backups; 0 means none, default 10 +loglevel=info ; log level; default info; others: debug,warn,trace +pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid +nodaemon=false ; start in foreground if true; default false +silent=false ; no logs to stdout if true; default false +minfds=1024 ; min. avail startup file descriptors; default 1024 +minprocs=200 ; min. avail process descriptors;default 200 +;umask=022 ; process file creation umask; default 022 +;user=supervisord ; setuid to this UNIX account at startup; recommended if root +;identifier=supervisor ; supervisord identifier, default is 'supervisor' +;directory=/tmp ; default is not to cd during start +;nocleanup=true ; don't clean up tempfiles at start; default false +;childlogdir=/tmp ; 'AUTO' child log dir, default $TEMP +;environment=KEY="value" ; key value pairs to add to environment +;strip_ansi=false ; strip ansi escape codes in logs; def. false + +; The rpcinterface:supervisor section must remain in the config file for +; RPC (supervisorctl/web interface) to work. Additional interfaces may be +; added by defining them in separate [rpcinterface:x] sections. + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +; The supervisorctl section configures how supervisorctl will connect to +; supervisord. configure it match the settings in either the unix_http_server +; or inet_http_server section. + +[supervisorctl] +serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket +;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket +;username=chris ; should be same as in [*_http_server] if set +;password=123 ; should be same as in [*_http_server] if set +;prompt=mysupervisor ; cmd line prompt (default "supervisor") +;history_file=~/.sc_history ; use readline history if available + +; The sample program section below shows all possible program subsection values. +; Create one or more 'real' program: sections to be able to control them under +; supervisor. + +;[program:theprogramname] +;command=/bin/cat ; the program (relative uses PATH, can take args) +;process_name=%(program_name)s ; process_name expr (default %(program_name)s) +;numprocs=1 ; number of processes copies to start (def 1) +;directory=/tmp ; directory to cwd to before exec (def no cwd) +;umask=022 ; umask for process (default None) +;priority=999 ; the relative start priority (default 999) +;autostart=true ; start at supervisord start (default: true) +;startsecs=1 ; # of secs prog must stay up to be running (def. 1) +;startretries=3 ; max # of serial start failures when starting (default 3) +;autorestart=unexpected ; when to restart if exited after running (def: unexpected) +;exitcodes=0 ; 'expected' exit codes used with autorestart (default 0) +;stopsignal=QUIT ; signal used to kill process (default TERM) +;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) +;stopasgroup=false ; send stop signal to the UNIX process group (default false) +;killasgroup=false ; SIGKILL the UNIX process group (def false) +;user=chrism ; setuid to this UNIX account to run the program +;redirect_stderr=true ; redirect proc stderr to stdout (default false) +;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO +;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) +;stdout_logfile_backups=10 ; # of stdout logfile backups (0 means none, default 10) +;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) +;stdout_events_enabled=false ; emit events on stdout writes (default false) +;stdout_syslog=false ; send stdout to syslog with process name (default false) +;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO +;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) +;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10) +;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) +;stderr_events_enabled=false ; emit events on stderr writes (default false) +;stderr_syslog=false ; send stderr to syslog with process name (default false) +;environment=A="1",B="2" ; process environment additions (def no adds) +;serverurl=AUTO ; override serverurl computation (childutils) + +; The sample eventlistener section below shows all possible eventlistener +; subsection values. Create one or more 'real' eventlistener: sections to be +; able to handle event notifications sent by supervisord. + +;[eventlistener:theeventlistenername] +;command=/bin/eventlistener ; the program (relative uses PATH, can take args) +;process_name=%(program_name)s ; process_name expr (default %(program_name)s) +;numprocs=1 ; number of processes copies to start (def 1) +;events=EVENT ; event notif. types to subscribe to (req'd) +;buffer_size=10 ; event buffer queue size (default 10) +;directory=/tmp ; directory to cwd to before exec (def no cwd) +;umask=022 ; umask for process (default None) +;priority=-1 ; the relative start priority (default -1) +;autostart=true ; start at supervisord start (default: true) +;startsecs=1 ; # of secs prog must stay up to be running (def. 1) +;startretries=3 ; max # of serial start failures when starting (default 3) +;autorestart=unexpected ; autorestart if exited after running (def: unexpected) +;exitcodes=0 ; 'expected' exit codes used with autorestart (default 0) +;stopsignal=QUIT ; signal used to kill process (default TERM) +;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) +;stopasgroup=false ; send stop signal to the UNIX process group (default false) +;killasgroup=false ; SIGKILL the UNIX process group (def false) +;user=chrism ; setuid to this UNIX account to run the program +;redirect_stderr=false ; redirect_stderr=true is not allowed for eventlisteners +;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO +;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) +;stdout_logfile_backups=10 ; # of stdout logfile backups (0 means none, default 10) +;stdout_events_enabled=false ; emit events on stdout writes (default false) +;stdout_syslog=false ; send stdout to syslog with process name (default false) +;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO +;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) +;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10) +;stderr_events_enabled=false ; emit events on stderr writes (default false) +;stderr_syslog=false ; send stderr to syslog with process name (default false) +;environment=A="1",B="2" ; process environment additions +;serverurl=AUTO ; override serverurl computation (childutils) + +; The sample group section below shows all possible group values. Create one +; or more 'real' group: sections to create "heterogeneous" process groups. + +;[group:thegroupname] +;programs=progname1,progname2 ; each refers to 'x' in [program:x] definitions +;priority=999 ; the relative start priority (default 999) + +; The [include] section can just contain the "files" setting. This +; setting can list multiple files (separated by whitespace or +; newlines). It can also contain wildcards. The filenames are +; interpreted as relative to this file. Included files *cannot* +; include files themselves. + +;[include] +;files = relative/directory/*.ini + +[program:craft-queue-worker] +; Use the process number in its name (required when using `numprocs`): +process_name=%(program_name)s_%(process_num)02d +numprocs=4 +command=php craft queue/listen --verbose=1 --color=0 +; User + Group should agree with HTTP processes: +user=www-data +group=www-data \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..2c63c085 --- /dev/null +++ b/composer.json @@ -0,0 +1,2 @@ +{ +}