please provide Setup Instructions (an Install Guide) in the docs for Ghost - Headless CMS

ISSUE TYPE

Feature request

SUMMARY
Could you please provide Setup Instructions (an Install Guide) in the docs for Ghost - Headless CMS at Github (Ghost - Headless CMS website) ?
Goal
Run Ghost headless CMS with an 11ty (Eleventy) static frontend.
Similar to what is described here : Eleventy and Ghost: Use your favourite static site generator!

@gunnard That would be cool.

Update: I have the latest version of Ghost running on devilbox. What seems like a simple rproxy for node setup is not. How would you like me to deliver the instructions for this? Should I just use the node rproxy page as a template?

@gunnard Thanks a lot! :1st_place_medal: :100:
Whatever is easier for you. If that's the node rproxy page then go for it.

@BobbyBabes I have created a feature branch. How can I push this to the repo? I do not have permission. I also cannot find (if there is any) what the instructions are for me to do this. I am very familiar with git so I just need to know what the process is for this project. Thank you!

@gunnard I would imagine you submit a pull request from your fork to this project.

@gunnard you can create this locally from within the docs/ directory. Simply enter make autobuild (in the docs dir), which will start a local server on http://<IP_ADDRESS>:8000 to preview all changes for the Sphinx docs - no tools except Docker required.

Awesome. Thank you!
On Wed, Jul 8, 2020, 5:27 PM cytopia<EMAIL_ADDRESS>wrote:

@gunnard https://github.com/gunnard you can create this locally from
within the docs/ directory. Simply enter make autobuild (in the docs
dir), which will start a local server on http://<IP_ADDRESS>:8000 to preview
all changes for the Sphinx docs - no tools except Docker required.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/cytopia/devilbox/issues/706#issuecomment-655789921,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABH3BF76BI5MNCPYIV3E6PDR2TXE7ANCNFSM4M2SUEIA
.

@cytopia this seems to not be working:
`º°¤ø[~/devilbox/docs]
º°¤ø[sudo make autobuild
docker run
--rm
$(tty -s && echo "-it" || echo)
-e SPHINX_PROJECT="docs"
-e SPHINX_PORT=8000
-e NEW_UID="$(id -u)"
-e NEW_GID="$(id -g)"
-p "8000:8000"
-v /..:/shared/httpd
devilbox/python-sphinx:3.8-dev
sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html
[INFO] Setting SPHINX_PROJECT to: docs
[INFO] Setting internal Sphinx port to: 8000
[INFO] Keeping SPHINX_BUILD_DIR at default: _build/html
[INFO] Setting NEW_UID to: 0
[INFO] Setting NEW_GID to: 0
[INFO] /etc/group: devilbox:x:0:devilbox
[INFO] /etc/passwd: devilbox:x:0:0:Linux User,,,:/home/devilbox:/bin/ash
[INFO] drwxr-sr-x    1 root     root          4096 Jul  9 11:35 /home/devilbox
[INFO] drwxr-xr-x   20 root     root          4096 Jul  9 20:34 /shared/httpd
[INFO] No requirements.txt file found at: /shared/httpd/docs/requirements.txt

sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html

+--------- manually triggered build ---------------------------------------------
Application error:
config directory doesn't contain a conf.py file (/shared/httpd/docs)
+--------------------------------------------------------------------------------
[I 200710 01:12:23 server:334] Serving on http://<IP_ADDRESS>:8000
[I 200710 01:12:23 handlers:62] Start watching changes
[I 200710 01:12:23 handlers:64] Start detecting changes
[W 200710 01:12:32 web:2246] 404 GET / (<IP_ADDRESS>) 2.53ms`
http://<IP_ADDRESS>:8000 returns '404: Not Found" in the browser
conf.py is in the docs dir... I have tried creating a copy within /data/www/docs -- shared/httpd/docs but I understand that this directory is a 1 off container so that did not pan out. any advice would be appreciated.

@BobbyBabes I have created a feature branch. How can I push this to the repo? ..........

I have no idea. I'm not the author, nor a member of this repo.

Thanks for your help @BobbyBabes , @cytopia did get back to me on a workflow.

@BobbyBabes I have created a feature branch. How can I push this to the repo? ..........

I have no idea. I'm not the owner, nor a member of this repo.

You need to fork the project and then just push it to the forked repository, it will then auto-offer to create a PR to upstream

@cytopia, while I have you,
I have not been able to get the sphinx server to work properly. This is on a fresh clone of devilbox, did a doccker-compose up once to make sure that it worked. then I tried make autobuild within the /docs dir.
docker run
--rm
$(tty -s && echo "-it" || echo)
-e SPHINX_PROJECT="docs"
-e SPHINX_PORT=8000
-e NEW_UID="$(id -u)"
-e NEW_GID="$(id -g)"
-p "8000:8000"
-v /..:/shared/httpd
devilbox/python-sphinx:3.8-dev
sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html
[INFO] Setting SPHINX_PROJECT to: docs
[INFO] Setting internal Sphinx port to: 8000
[INFO] Keeping SPHINX_BUILD_DIR at default: _build/html
[INFO] Setting NEW_UID to: 0
[INFO] Setting NEW_GID to: 0
[INFO] /etc/group: devilbox:x:0:devilbox
[INFO] /etc/passwd: devilbox:x:0:0:Linux User,,,:/home/devilbox:/bin/ash
[INFO] drwxr-sr-x    1 root     root          4096 Jul  9 11:35 /home/devilbox
[INFO] drwxr-xr-x   20 root     root          4096 Jul  9 20:34 /shared/httpd
[INFO] No requirements.txt file found at: /shared/httpd/docs/requirements.txt

sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html

+--------- manually triggered build ---------------------------------------------
Application error:
config directory doesn't contain a conf.py file (/shared/httpd/docs)
+--------------------------------------------------------------------------------
[I 200713 13:36:00 server:334] Serving on http://<IP_ADDRESS>:8000
[I 200713 13:36:00 handlers:62] Start watching changes
[I 200713 13:36:00 handlers:64] Start detecting changes
[W 200713 13:36:28 web:2246] 404 GET / (<IP_ADDRESS>) 3.11ms
[W 200713 13:36:29 web:2246] 404 GET /favicon.ico (<IP_ADDRESS>) 1.32ms
^C[I 200713 13:37:33 server:355] Shutting down...
I shut it down with ^C after showing a 404 on <IP_ADDRESS>:8000

what am I doing wrong?

@gunnard Seems like the mount part is not really working:
-v /..:/shared/httpd

which is defined as:
-v $(PWD)/..:/shared/httpd \

So I am guessing the $(PWD) variable is not being resolved. Can you set and export this explicitly to the full path of the docs directory

Same result (unless I am doing this wrong) I also tried the replacement for linkcheck and it fails
`docker run
--rm
$(tty -s && echo "-it" || echo)
-e SPHINX_PROJECT="docs"
-e SPHINX_PORT=8000
-e NEW_UID="$(id -u)"
-e NEW_GID="$(id -g)"
-p "8000:8000"
-v /home/gunnard/devilbox/docs
devilbox/python-sphinx:3.8-dev
sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html
[INFO] Setting SPHINX_PROJECT to: docs
[INFO] Setting internal Sphinx port to: 8000
[INFO] Keeping SPHINX_BUILD_DIR at default: _build/html
[INFO] Setting NEW_UID to: 0
[INFO] Setting NEW_GID to: 0
[INFO] /etc/group: devilbox:x:0:devilbox
[INFO] /etc/passwd: devilbox:x:0:0:Linux User,,,:/home/devilbox:/bin/ash
[INFO] drwxr-sr-x    1 root     root          4096 Jul  9 11:35 /home/devilbox
[INFO] drwxr-xr-x    1 root     root          4096 Jul  9 11:35 /shared/httpd
[WARN]  directory does not exist: /shared/httpd/docs
[INFO] Creating project dir: /shared/httpd/docs
[INFO] Creating Python virtual env: /shared/httpd/docs/venv
created virtual environment CPython3.8.3.final.0-64 in 923ms
creator CPython3Posix(dest=/shared/httpd/docs/venv, clear=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/devilbox/.local/share/virtualenv)
added seed packages: pip==20.1.1, setuptools==49.1.0, wheel==0.34.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
[INFO] Creating build dir: /shared/httpd/docs/_build/html
[INFO] No requirements.txt file found at: /shared/httpd/docs/requirements.txt

sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html`

-v $(PWD)/..:/shared/httpd \

So I am guessing the $(PWD) variable is not being resolved. Can you set and export this explicitly to the full path of the docs directory

Shouldn’t PWD be pwd (lowercase) instead?

Tested that out, no go.
Quick google found this:
PWD=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
my output using $(PWD) is:
docker run
--rm
$(tty -s && echo "-it" || echo)
-e SPHINX_PROJECT="docs"
-e SPHINX_PORT=8000
-e NEW_UID="$(id -u)"
-e NEW_GID="$(id -g)"
-p "8000:8000"
-v /home/gunnard/devilbox/docs:/shared/httpd
devilbox/python-sphinx:3.8-dev
sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html
[INFO] Setting SPHINX_PROJECT to: docs
[INFO] Setting internal Sphinx port to: 8000
[INFO] Keeping SPHINX_BUILD_DIR at default: _build/html
[INFO] Setting NEW_UID to: 0
[INFO] Setting NEW_GID to: 0
[INFO] /etc/group: devilbox:x:0:devilbox
[INFO] /etc/passwd: devilbox:x:0:0:Linux User,,,:/home/devilbox:/bin/ash
[INFO] drwxr-sr-x    1 root     root          4096 Jul  9 11:35 /home/devilbox
[INFO] drwxrwxr-x   20 root     root          4096 Jul 13 16:58 /shared/httpd
[WARN]  directory does not exist: /shared/httpd/docs
[INFO] Creating project dir: /shared/httpd/docs
[INFO] Creating Python virtual env: /shared/httpd/docs/venv
created virtual environment CPython3.8.3.final.0-64 in 2838ms
creator CPython3Posix(dest=/shared/httpd/docs/venv, clear=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/devilbox/.local/share/virtualenv)
added seed packages: pip==20.1.1, setuptools==49.1.0, wheel==0.34.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
[INFO] Creating build dir: /shared/httpd/docs/_build/html
[INFO] No requirements.txt file found at: /shared/httpd/docs/requirements.txt

sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html

+--------- manually triggered build ---------------------------------------------
Application error:
config directory doesn't contain a conf.py file (/shared/httpd/docs)
+--------------------------------------------------------------------------------
[I 200713 16:59:05 server:334] Serving on http://<IP_ADDRESS>:8000
[I 200713 16:59:05 handlers:62] Start watching changes
[I 200713 16:59:05 handlers:64] Start detecting changes
[W 200713 16:59:16 web:2246] 404 GET / (<IP_ADDRESS>) 1.56ms
[W 200713 16:59:17 web:2246] 404 GET /favicon.ico (<IP_ADDRESS>) 1.11ms

Change $(PWD) into $(pwd). The command pwd must be in all lowercase. See screenshot.

I tottally agree with you that in the shell $(pwd) will return the pwd. In the Makefile however it is not returning any value. I have done echo $(pwd) and printf $(pwd) and they both return empty.
I did add PWD=$(shell pwd) and used $(PWD) in the script and it is returning /home/gunnard/devilbox/docs. unfortunatly I am still getting the same errors.
docker run
--rm
$(tty -s && echo "-it" || echo)
-e SPHINX_PROJECT="docs"
-e SPHINX_PORT=8000
-e NEW_UID="$(id -u)"
-e NEW_GID="$(id -g)"
-p "8000:8000"
-v /home/gunnard/devilbox/docs:/shared/httpd
devilbox/python-sphinx:3.8-dev
sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html
[INFO] Setting SPHINX_PROJECT to: docs
[INFO] Setting internal Sphinx port to: 8000
[INFO] Keeping SPHINX_BUILD_DIR at default: _build/html
[INFO] Setting NEW_UID to: 0
[INFO] Setting NEW_GID to: 0
[INFO] /etc/group: devilbox:x:0:devilbox
[INFO] /etc/passwd: devilbox:x:0:0:Linux User,,,:/home/devilbox:/bin/ash
[INFO] drwxr-sr-x    1 root     root          4096 Jul  9 11:35 /home/devilbox
[INFO] drwxrwxr-x   21 root     root          4096 Jul 13 17:33 /shared/httpd
[INFO] No requirements.txt file found at: /shared/httpd/docs/requirements.txt

sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html

+--------- manually triggered build ---------------------------------------------
Application error:
config directory doesn't contain a conf.py file (/shared/httpd/docs)
+--------------------------------------------------------------------------------
[I 200713 17:33:56 server:334] Serving on http://<IP_ADDRESS>:8000
[I 200713 17:33:56 handlers:62] Start watching changes
[I 200713 17:33:56 handlers:64] Start detecting changes
Interestingly enough on the line with the /home/gunnard/devilbox/docs:/shared/httpd line .. the original Makefile had ..: inbetween the /home/gunnard/devilbox/docs and /shared/httpd. when the .. is there, a  docs.. directory is created within /home/gunnard/devilbox

Oh man that S.cks. Could you try ${PWD} ?
Curly braces, all caps.

${PWD} does return the correct path. I am still getting the same errors. when the docs.. directory is created (as in my last post) the correct spinhx files are put in there. Somehow it is not setting the already created docs directory as the config directory.. @cytopia am I the only one who is running into this issue?? I am totally accepting that my environment is setup strange somehow if not.

I just cloned this repo. Changed directory into the docs directory. Then ran make autobuild.
I'm seeing this :
 bobbybabes  ladyluck  ~  dev  devilbox-docs-test  devilbox  docs   master  $   make autobuild
docker run \
        --rm \
        $(tty -s && echo "-it" || echo) \
        -e SPHINX_PROJECT="docs" \
        -e SPHINX_PORT=8000 \
        -e NEW_UID="$(id -u)" \
        -e NEW_GID="$(id -g)" \
        -p "8000:8000" \
        -v /home/bobbybabes/dev/devilbox-docs-test/devilbox/docs/..:/shared/httpd \
        devilbox/python-sphinx:3.8-dev \
        sphinx-autobuild -a -E -n -j auto -W -H <IP_ADDRESS> -p 8000 . _build/html
[INFO] Setting SPHINX_PROJECT to: docs
[INFO] Setting internal Sphinx port to: 8000
[INFO] Keeping SPHINX_BUILD_DIR at default: _build/html
[INFO] Setting NEW_UID to: 1000
[INFO] Setting NEW_GID to: 100
[INFO] /etc/group: devilbox:x:100:devilbox
[INFO] /etc/passwd: devilbox:x:1000:100:Linux User,,,:/home/devilbox:/bin/ash
[INFO] drwxr-sr-x    1 devilbox users         4096 Jul 13 11:38 /home/devilbox
[INFO] drwxr-xr-x   16 devilbox users         4096 Jul 13 18:57 /shared/httpd
[INFO] Installing pip requirements from: /shared/httpd/docs/requirements.txt
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f3ddba59250>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f3ddba594f0>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f3ddba59490>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f3ddba59880>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f3ddba59f70>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
ERROR: Could not find a version that satisfies the requirement recommonmark (from -r /shared/httpd/docs/requirements.txt (line 1)) (from versions: none)
ERROR: No matching distribution found for recommonmark (from -r /shared/httpd/docs/requirements.txt (line 1))
make: *** [Makefile:58: autobuild] Error 1
 bobbybabes  ladyluck  ~  dev  devilbox-docs-test  devilbox  docs   master  USAGE  $ 

Is it possible to screenshot me the setup instructions?
Pretty please with sugar on top.

The instructions are in the README.md in /docs
Local setup
You can also build the documentation locally before pushing to ensure everything looks fine:
Requirements

Docker

How to check for broken links
cd docs/
make linkcheck
make linkcheck2

How to build and error-check
cd docs/
make build

How to build continuously
cd docs/
make autobuild

How to view
When using make autobuild your documentation is served at: http://<IP_ADDRESS>:8000
no, within devilbox (via shell.sh) I just have shared/httpd

Yes, /shared/httpd/ is the working directory where things are mounted inside the docker container.
@gunnard Do you have any of the security programs enabled (Selinux, etc...)? many people have to add options to let the security protocols let it through.
In the .env file it is the MOUNT_OPTIONS variable, and often needs a MOUNT_OPTIONS=,z
Other tips for debugging:
use the shell.sh script to log into the container and confirm what is mounted from the containers's perspective.
(does navigating to <IP_ADDRESS> really work like that? I usually go to some form of localhost)

Already had done the link checks. That's why it took me about an hour and a half before I responded. I believe that make linkcheck2 hangs/freezes. It sits forever one the last line starting with [TEST]. So I cancelled after one hour plus.
I'm not seeing /shared/httpd because Sphynx is never started.
 bobbybabes  ladyluck  ~  dev  devilbox-docs-test  devilbox  docs   master  $   make linkcheck
docker run \
        --rm \
        $(tty -s && echo "-it" || echo) \
        -e SPHINX_PROJECT="docs" \
        -e SPHINX_PORT=8000 \
        -e NEW_UID="$(id -u)" \
        -e NEW_GID="$(id -g)" \
        -v /home/bobbybabes/dev/devilbox-docs-test/devilbox/docs/..:/shared/httpd \
        devilbox/python-sphinx:3.8-dev \
        sphinx-build -M linkcheck . _build
[INFO] Setting SPHINX_PROJECT to: docs
[INFO] Setting internal Sphinx port to: 8000
[INFO] Keeping SPHINX_BUILD_DIR at default: _build/html
[INFO] Setting NEW_UID to: 1000
[INFO] Setting NEW_GID to: 100
[INFO] /etc/group: devilbox:x:100:devilbox
[INFO] /etc/passwd: devilbox:x:1000:100:Linux User,,,:/home/devilbox:/bin/ash
[INFO] drwxr-sr-x    1 devilbox users         4096 Jul 13 11:38 /home/devilbox
[INFO] drwxr-xr-x   16 devilbox users         4096 Jul 13 18:57 /shared/httpd
[INFO] Installing pip requirements from: /shared/httpd/docs/requirements.txt
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7447a7e250>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7447a7e4f0>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7447a7e490>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7447a7e880>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7447a7ef70>: Failed to establish a new connection: [Errno -3] Try again')': /simple/recommonmark/
ERROR: Could not find a version that satisfies the requirement recommonmark (from -r /shared/httpd/docs/requirements.txt (line 1)) (from versions: none)
ERROR: No matching distribution found for recommonmark (from -r /shared/httpd/docs/requirements.txt (line 1))
make: *** [Makefile:34: linkcheck] Error 1

 bobbybabes  ladyluck  ~  dev  devilbox-docs-test  devilbox  docs   master  USAGE  $   make linkcheck2
docker run \
        --rm \
        $(tty -s && echo "-it" || echo) \
        -v /home/bobbybabes/dev/devilbox-docs-test/devilbox/docs:/data \
        cytopia/linkcheck -l -k -r 60 -t 30 -e rst -c '200,204' _includes/
Unable to find image 'cytopia/linkcheck:latest' locally
latest: Pulling from cytopia/linkcheck
cbdbe7a5bc2a: Pull complete
66d6e31e3736: Pull complete
e8045ad5cf91: Pull complete
4bc43a398d1b: Pull complete
Digest: sha256:07837813b1d7fbe608d58f492c206f25ec8013743ab05d832ffefe2921d1bcba
Status: Downloaded newer image for cytopia/linkcheck:latest
$ find _includes/ \( -iname \*.rst \) -type f -exec grep -IEo 'http(s)?:\/\/[-+%=?&():,._/#0-9a-zA-Z]+' '{}' \; | sort -u
[TEST] http://doc.prestashop.com/display/PS17/Getting+started ...

@science695 I do not have anything installed that should interfere with the
mounts. I have created mounted dirs from /data/www and inside /shared/httpd
that show up in my host/devilbox system. I did try MOUNT_OPTIONS=,z and
this is what I got when doing a docker-compose up
`º°'°º¤ø[gunnard]
º°¤ø[~/devilbox]
º°¤ø[docker-compose up httpd mysql php bind
Creating devilbox_bind_1 ... done
Creating devilbox_php_1  ... error
ERROR: for devilbox_php_1  Cannot create container for service php: invalid
mode: rw,x
ERROR: for php  Cannot create container for service php: invalid mode: rw,x
ERROR: Encountered errors while bringing up the project.`
On Mon, Jul 13, 2020 at 2:50 PM science695<EMAIL_ADDRESS>wrote:

Yes, /shared/httpd/ is the working directory where things are mounted
inside the docker container.
@gunnard https://github.com/gunnard Do you have any of the security
programs enabled (Selinux, etc...)? many people have to add options to let
the security protocols let it through.
In the .env file it is the MOUNT_OPTIONS variable, and often needs a
MOUNT_OPTIONS=,z
Other tips for debugging:
use the shell.sh script to log into the container and confirm what is
mounted from the containers's perspective.
(does navigating to <IP_ADDRESS> really work like that? I usually go to some
form of localhost)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/cytopia/devilbox/issues/706#issuecomment-657757318,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABH3BF35ZWI35CDBKTIKQOLR3NQRHANCNFSM4M2SUEIA
.

I fatfingered an X instead of Z, this time it brought up devilbox but the make autobuild still failed the same way. The server is responsive a <IP_ADDRESS>:8000 I see a rendered 404 and the command line output shows a 404 GET /

I just installed a Ghost + Eleventy container as described here : Eleventy and Ghost: Use your favourite static site generator!
It's not exactly what I wanted, but I'm getting tired of the Devilbox Docs build process.

lol! that was my first success, was just using the container and hooking into it. then I did a full install of the code without the ghost container ...

How lol that may be, I just unsubscribed from this issue, and I'm closing it right after. @gunnard I thank you for your hard work. You were helpful and brave. But the lack of response from the repo owner (not only in this issue, but also in other issues and the forum) is disturbing. I'm also uninstalling Devilbox. Back to Linux KVM.


[Enhancement] Socket Channel may be null if error or crash during client-side connecting

Search before asking

[X] I had searched in the issues and found no similar issues.

Enhancement Request
Locating at: org/apache/eventmesh/client/tcp/common/TcpClient.java
Line: 118
the implementation of close()
try{
    channel.disconnect().sync();
    // ...
} catch {
    // ...
}

close() would be called

call func explicitly
call func in finally block for resource safety
deffer implicitly  caz try()

socket will fail if the error or crash is on bind(), channel reference will be Null
Describe the solution you'd like
Removing channel.disconnect().sync(); , resources will be closed with the determination of EventLoopGroup
Are you willing to submit PR?

[ ] Yes I am willing to submit a PR!

@Bannirui Did the change in https://github.com/apache/eventmesh/issues/4855 help resolve this issue?


How to display groups side by side

How can I get sub groups to display side by side like the Flags and Price_Range groups below? I can create multiple groups but they all display top to bottom in the order they were defined. I would like to have sub groups in the Required Options group and tried to pass the required_cols argument to the Gooey decorator but it did nothing.

Good question! I've been meaning to write up a doc on creating more complex layouts in Gooey. The argument you're looking for is columns. I've started documenting the various Gooey options here: https://github.com/chriskiehl/Gooey/blob/1.0.3-release/docs/Gooey-Options.md
By default, groups are single column, but you can tune it to whatever you want. Here's a code sample:
@Gooey
def main():
    parser = GooeyParser()
    parent = parser.add_argument_group('Search Options', gooey_options={
        'columns': 2
    })
    parent.add_argument('--query-string', help='the search string')

    child_one = parent.add_argument_group('flags', gooey_options={'show_border': True})
    child_one.add_argument('--option1', help='some text here')

    child_two = parent.add_argument_group('price', gooey_options={'show_border': True})
    child_two.add_argument('--option2', help='some text here')
    args = parser.parse_args()

if __name__ == '__main__':
    main()


chore: update SessionReplay and AutoCapture snips

🚀 Deployed on https://670eeea260fb3487cd946af7--cozy-fox-0defec.netlify.app


chore(main): release 3.0.0

:robot: I have created a release beep boop
3.0.0 (2024-08-21)
⚠ BREAKING CHANGES

Change winopt and bufopt configuration
Introduce split layout in configuration
Remove statuscolumn in defaut winopt
config: Changed type and meaning of bufopt and winopt

Features

Add tab commands (f0c4e43)
Change winopt and bufopt configuration (d90ff24)
config: Changed type and meaning of bufopt and winopt (6174718)
Handle cases when minimap window is invalid (0e3c4b0)
Introduce split layout in configuration (6dcb593)
Log on command teiggered (bb0acc2)
Remove statuscolumn in defaut winopt (3dcfb53)
Split window prototype (1beff18)

Bug Fixes

Add winfixwidth to window options (2ee1495)
Assign single variable instead of table (e86815a)
Check minimap width on refreshing (3f36e7a)
Focus not working (6e0e531)
Global on/off should overrite win on/off (a111fa8)
Handle cases when bufnr in debounce function may be null (47f7f6e)
Handle cases when no buffer left (d2c7a4f)
Handle cases when source window is nil (e4849ca)
Handle tab on/off in float loyout (40ebb6c)
Handle WinEnter events (47ce35e)

This PR was generated with Release Please. See documentation.

:robot: Created releases:

v3.0.0
:sunflower:


check if user has RequiredRoles and delegating the query to PicketLink

The main idea of this change is to check if a user has the Roles asking that to PicketLink.
The previous version only checked if the user was directly granted a role, but if the user has the role for being a member of a group has the role the client received no roles.

This looks good in theory, but we need a different way to query the current user's roles. See my comment above. Thanks!


fix: Really force all directories recursively when --force-all-dirs is used

I thought you said this was redundant now?

I keep forgetting to tell you about this.


Memory Leaks!

Getting pretty consistent memory leaks, increasing browser memory footprint by around 0.5-5mb every render. I have a maximum of 100 items in my carousel which is dynamically updated every 10-40 seconds.
As you can imagine, after a while the page crashes.
I noticed the original library has had a similar issue https://github.com/kenwheeler/slick/issues/1380
Anyone help with this matter would be much appreciated.

Having similar issues.. I love this plugin but I had to remove because of consistent memory leaks. It left detached elements in the DOM tree that grew exponentially over time.

Is it happening in a particular scenario ?
Can you give a code snippet to replicate this issue

It could be specific to my scenario, it's hard to say. I'll see if I can setup a fiddle this weekend to reproduce. Thanks.

Hi, @HuntBurdick any progress with reproducing with js fiddle?

I've been super slammed at work and haven't been able to create a fiddle to try to reproduce. I am using react-slick in our production website (edealerdirect.com) and I am seeing memory issues that I believe stem from a conflict between react-slick and either lazy loading components or some jQuery dependencies.

Hello,
i probably found the source of the memory leak it's the function checkImagesLoad()
https://github.com/akiran/react-slick/blob/master/src/inner-slider.js#L298
After removing this function at componentDidUpdate(), the memory leak is gone.

@endbay you are right! Reproduced.

Found fix.
Define handler before forEach.
https://github.com/akiran/react-slick/pull/1397

Memory leaks were caused by arrow functions used for onlick and onload.

Hello,
i probably found the source of the memory leak it's the function checkImagesLoad()
https://github.com/akiran/react-slick/blob/master/src/inner-slider.js#L298
After removing this function in componentDidUpdate(), the memory leak is gone.

i'm newbie. Can you give me a code to remove that function ? Thanks.

@quocthangit247 Can you give us code snippet to replicate the memory leak .
Also can post the memory profiler snapshot before and after disabling componentDidUpdate

@quocthangit247 Can you give us code snippet to replicate the memory leak .
Also can post the memory profiler snapshot before and after disabling componentDidUpdate

i use to display some pictures after that i see that chrome dev have warning and loop until no see. i don't know how to explain for you but this issue like ENDBAY. I have a solution for that is using lazyLoad in settings. it disappear when i add lazyload option.

Hey guys! any update on this? I'm hunting for memory leaks in my app as well and Chrome DevTools is also pointing towards inner-slider.js
Thanks!

@fcolella GH-1456
Spotted this issue as well today. The leaks are huge.

@quocthangit247 Can you give us code snippet to replicate the memory leak .
Also can post the memory profiler snapshot before and after disabling componentDidUpdate

i use to display some pictures after that i see that chrome dev have warning and loop until no see. i don't know how to explain for you but this issue like ENDBAY. I have a solution for that is using lazyLoad in settings. it disappear when i add lazyload option.

updated: it's still ... so i have to remove it

I too am suffering with inner-slider.js increasing in footprints over prolonged duration. Does the above PR fix the issue? If so can it be merged? I'm going to have to find a replacement if not.

Just chiming in to say this is an existing issue in the latest release. I put this in a production application and now have to replace it after this bug surfaced it's head after hours of running. This is a deal-breaker for this library.

Hi I am wondering when this fix will be released. I see the last release was 5 months ago. Thank you

@akiran Any chance to release it?

@akiran do you think you will fix this leak ? we are thinking to change library since it can't work. The leak is huge.
Sad because the slider in itself is nice :)


addView() seems to break MotionLayout

Using version 2.0.4 and 2.1.0 (haven't noticed any difference regarding my specific issue)
I'm currently building a screen that features a module that the user can drag from the bottom. Behind the module is the main content of the screen, which is highly dynamic and could receive an addView()/removeAllViews() at any time.
addView() is NOT done on a direct child of my motion layout. It is done several layers below.
I'm noticing that when any addView()/removeAllViews() happens, if the motion layout is in the middle of a transition, the container gets laid out fine, however all the children are now laid out with x = 0, y = 0, width = 0, height = 0, measuredWidth = 0, measuredHeight = 0. I have tried hardcoding the layout parameters of the children with no luck.
The motion layout looks like this:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/motion_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutDescription="@xml/scene_expandable_module"
    tools:showPaths="true">

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/half_screen_guideline"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.5" />

    <FrameLayout
        android:id="@+id/main_content"
        android:layout_width="@dimen/zero_spacing"
        android:layout_height="@dimen/zero_spacing" />

    <FrameLayout
        android:id="@+id/bottom_sheet"
        android:layout_width="@dimen/zero_spacing"
        android:layout_height="@dimen/zero_spacing" />

    <View
        android:id="@+id/draggable_top"
        android:layout_width="@dimen/zero_spacing"
        android:layout_height="@dimen/zero_spacing" />

</androidx.constraintlayout.motion.widget.MotionLayout>

And the motion scene looks like this:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <Transition
        app:constraintSetEnd="@id/end"
        app:constraintSetStart="@id/start"
        app:duration="300">
        <OnSwipe
            app:maxAcceleration="15"
            app:touchAnchorId="@id/draggable_top" />
    </Transition>

    <ConstraintSet android:id="@+id/start">
        <Constraint
            android:id="@id/draggable_top"
            android:layout_width="@dimen/zero_spacing"
            android:layout_height="@dimen/zero_spacing"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

        <Constraint
            android:id="@id/main_content"
            android:layout_width="@dimen/zero_spacing"
            android:layout_height="@dimen/zero_spacing"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Constraint
            android:id="@id/bottom_sheet"
            android:layout_width="@dimen/zero_spacing"
            android:layout_height="@dimen/zero_spacing"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/draggable_top" />
    </ConstraintSet>

    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@id/draggable_top"
            android:layout_width="@dimen/zero_spacing"
            android:layout_height="@dimen/zero_spacing"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Constraint
            android:id="@id/main_content"
            android:layout_width="@dimen/zero_spacing"
            android:layout_height="@dimen/zero_spacing"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Constraint
            android:id="@id/bottom_sheet"
            android:layout_width="@dimen/zero_spacing"
            android:layout_height="@dimen/zero_spacing"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/draggable_top" />
    </ConstraintSet>

</MotionScene>

main_content is the parent of the view that will get the dynamic children, while bottom_sheet is the module that I want to let the user drag up and down.
main_content is not meant to be resized at all. I always want it to take all the available room on the screen.
Everything seems to work fine if I add/remove views outside of the transition, however if the user is in the middle of dragging the module up or down, all the dynamic views get that width/height of zero.
Am I doing something wrong? I've been digging at this issue for the past couple of days and can't figure out why those views can't be laid out properly. I've also tried calling forceLayout(), requestLayout(), invalidate() on the container, with no luck,

Try adding
    <Transition
    ...
     motion:layoutDuringTransition="honorRequest"
     \>

Try adding
    <Transition
    ...
     motion:layoutDuringTransition="honorRequest"
     \>

Thanks for the reply. I have tried it and while it looks very promising, I am still seeing cases where the views' layouts are completely stuck in that 0x0 state.
Updating the views in that child looks like this:
        removeAllViews()

        // items: List<T>
        // itemToView: (T) -> View
        for (item in items) {
            val view = itemToView(item)
            addView(view)
        }

The bug seems to happen when I do the drag gesture up and down a lot, causing many visibility changes of the child containing all these dynamic views. The code looks like this:
 private fun onModuleStateChange() {
    container.isInvisible = motionLayout.progress > 0.8f
}

I've tried resetting the layout params in onTransitionChange with no luck. Resetting them in onTransitionCompleted seems to work but it's not ideal as there is an inbetween state where the views aren't visible.

I am still confused as to all that is happening in you code but I can  give a few relevant bits of information

MotionLayout does not use layout parameters. It uses the MotionScene and its constraintSets
MotionLayout only controls its direct children
All views in MotionLayout need id for the control to work.
Modify ConstraintSets used in MotionLayout (Search Stack Overfflow etc.  for examples)

Generally it is not a good idea to mix animation approaches so if you want a view to be invisible in MotionLayout
Added it to the MotionScene or Modify the ConstraintSets dynamically
You can look at the code in the MotionHelper MotionEffect as an example of dynamic inserting of complex motion behavior.


Correct buf CLI version

Release 1.29.0-1 used the wrong version for the CLI. Fixes the action.
Fixes #188

In a followup, can we verify that the default version exists in a test?


Send also topic type via MQTT

Looks good to me! Only thing i noticed is that we have mixed spaces and tabs as indentation in Bridge.cpp,  but I am not sure if this PR should be used to fix that.
Is the PR ready for merge?

You are right. I've fixed the mixed indention since it was introduced by this pr.
Now it is ready to merge. Thanks!


Installing the pre-built v0.2.85 – v0.2.87 Metal wheels for Python {3.10, 3.11} yields Bad magic number for file header

Expected Behavior
Installing the pre-built v0.2.85 Metal wheels works for all supported versions of Python.
Current Behavior
Installing the pre-built v0.2.85 Metal wheels for Python {3.10, 3.11} yields Bad magic number for file header. The Python {3.9, 3.12} versions work as expected.
Environment and Context
macOS 14 on a MacBook Pro M1 Max
Steps to Reproduce
You can test this by downloading the wheels and trying to decompress them:
Decompressing fails for:

https://github.com/abetlen/llama-cpp-python/releases/download/v0.2.85-metal/llama_cpp_python-0.2.85-cp310-cp310-macosx_11_0_arm64.whl
https://github.com/abetlen/llama-cpp-python/releases/download/v0.2.85-metal/llama_cpp_python-0.2.85-cp311-cp311-macosx_11_0_arm64.whl

Decompressing works for:

https://github.com/abetlen/llama-cpp-python/releases/download/v0.2.85-metal/llama_cpp_python-0.2.85-cp39-cp39-macosx_11_0_arm64.whl
https://github.com/abetlen/llama-cpp-python/releases/download/v0.2.85-metal/llama_cpp_python-0.2.85-cp312-cp312-macosx_11_0_arm64.whl

Update: I see that the pre-built v0.2.85 Metal wheels produced by the GitHub Actions workflow seem to work fine [1], so the issue must be with the way that the artifacts are turned into a release.
[1] https://github.com/abetlen/llama-cpp-python/actions/runs/10183985970

Still an issue for v0.2.86 and v0.2.87. Interestingly, for v0.2.86 only the Python 3.10 version works.

Still an issue for all v0.3.0 Metal builds: https://github.com/abetlen/llama-cpp-python/releases/tag/v0.3.0-metal. To verify that this is an issue, simply download the wheel file and try to decompress it.


Instructions for running on Cloud Functions for Firebase

Similar to https://github.com/probot/probot/issues/149 this framework seems like a great fit for a serverless workload.  In fact the code block in the main README looks very similar to the hello world example for Cloud Functions:
Probot:
module.exports = robot => {
  robot.on('issues.opened', async context => {
    const issueComment = context.issue({ body: 'Thanks for opening this issue!' })
    return context.github.issues.createComment(issueComment)
  })
}

Cloud Functions HTTP Example:
exports.myRobotFunction = functions.https.onRequest((req, res) => {
  // ...
});

Would you be open to my adding documentation on how to deploy a Probot on Cloud Functions for Firebase in this repository?  I assume I'll have to get around the async/await issues mentioned in #149 but that's likely not an impossible hurdle.
cc @abehaskins @codingdoug

Hey folks! 👋 We'd love to have a service-agnostic serverless deployment path for Probot apps. Lambda was sort of our first attempt, and we're still ironing out the details there (trying to migrate to Typescript, which would include compiling for Node 6.10 #372). I'm 👍 for getting some docs in place for Cloud Functions.
@ocombe has some Probot apps running on Google Cloud Functions already for the Angular org, I'm interested to hear his thoughts.
The other thing is that Probot as it is now runs a Node server; that's largely overkill for Cloud Functions and we've talked about disabling that server for "endpoint"-centric apps (see #374). I'm wondering if its worth adding these docs before we take steps to improve the experience of actually having a Probot app as a serverless function.

@JasonEtco I think you're right, it makes sense for something like #374 to happen before targeting serverless platforms.  Seems like the express server that probot runs is just doing routing from URLs to code chunks which is what GCF/Lambda do.

@samtstern Basically what you need to trigger from the function handler is the same code that's in probot-simulate: https://github.com/probot/probot/blob/f8abe25d8375fa11546dd70141c279fca5b73478/bin/probot-simulate.js#L25-L35
I'm going to experiment with an abstraction for this that to make work with both lambda and gcf out of the box. In both cases you just need to take the request payload and send it to probot.receive, but there's some boilerplate that's specific to each environment that we'd like to handle for you.

TLDR: It wasn't too bad, but there are lots of things that we can abstract and document. The most significant change is of course the handler file which can be easily abstracted.

I've just deployed an app to Google Cloud Functions (which as I understand is basically Firebase Cloud Functions, feel free to correct me if I'm wrong); I'll go ahead and highlight what I had to differently, and how we can abstract those differences into some kind of probot.serverless() method:
Handler
The handler file can probably be hidden since I'm not doing anything special. Instead, we could do something like:
const myApp = require('./my-app.js')
module.exports = probot.serverless('google-cloud-functions', myApp)

Where probot.serverless() exports a function that looks just like the handler in the above file. This comes with some challenges though; we'd have to handle each FaaS differently. This also doesn't solve the deployment aspect. Also in that method, we can add the required log streams (you'll notice that in my app I add a stream for Stackdriver, it'd be great if our users didn't have to wonder why their logs haven't shown up).
Using environment variables
Doing this was kinda lame; GCF doesn't support env vars. Firebase may be different. I had to store my env vars in a .json file then require it; not a huge problem, just meant some duplication between the .env file which would have been best. I might have been able to use dotenv here though.
Deployment
GCF has a nice SDK for deploying cloud functions so that was no problem. I know that Firebase has the same, so that's awesome and I'd love to document it.
Transpiling
With the awesome work going on in #372, I was able to use the probot-ts package successfully and transpile just my app (which was a point of friction during our experiments with Lambda). I think it's best to leave this to userland, and provide a "start" webpack/babel config to copy-paste for simple use-cases.

@samtstern - I think the exported functions are a bit different, so we might need a small change between google-cloud-functions and firebase-cloud-functions; I'd love some specifics if you have resources to show us!
@tcbyrd - I hope this helps as you think about the .serverless() method.

@JasonEtco Thanks for trying it out and documenting your thoughts!

GCF doesn't support env vars. Firebase may be different. I had to store my env vars in a .json file then require it

Firebase is basically the same, but there's a method to obtain a specific variable using the Firebase SDK. When your function is deployed in Firebase, this is available to you by doing something like firebase.config().probot.app_id, so you can just use that instead of process.env.APP_ID. The related concept in Google Cloud is the Runtime Config. I'd imagine there's some way to get this using the gcloud SDK equivalent, but can't find it documented at the moment.

The related concept in Google Cloud is the Runtime Config.

@tcbyrd - I should have been more clear; I did actually try using this, and didn't have much luck. I tried using this package (which looks to just be a wrapper around the Google API SDK) but was put off by the Promise-based, request-driven nature, since you'd need to run it every time the function is called, whereas with a normal environment variable it'd be defined before the function is called.
A small difference I know, but in FaaS I try to keep everything as tight as possible.
And FWIW, aside from the environment variables I'm really happy with how its been deployed. Glad to hear that thats solved in Firebase.

Exciting progress!  Just to clarify some things, Google Cloud Functions and Cloud Functions for Firebase are the same infrastructure under the hood.  The "for Firebase" mostly gets you a different deployment model and some Firebase-specific triggers.
Most developers use the firebase CLI to deploy / configure cloud functions.  This CLI is developed in the open and is also usable as a node library: https://github.com/firebase/firebase-tools
So for example on the command line you might do:
firebase functions:config:set probot.app_id="MY APP ID"

But you could do it in a node script:
const firebase = require("firebase-tools");

firebase.functions.config.set(["probot.app_id=\"MY_APP_ID\"", {
    project: project
});

Oh I also just saw the question about how functions are exported.  In this case we only need to consider HTTP functions.
These are very similar in plain-GCF and Firebase since both use Express:

Cloud: https://cloud.google.com/functions/docs/writing/http
Firebase: https://firebase.google.com/docs/functions/http-events

Cloud example:
/**
 * Responds to any HTTP request that can provide a "message" field in the body.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
exports.helloWorld = (req, res) => {
  if (req.body.message === undefined) {
    // This is an error case, as "message" is required
    res.status(400).send('No message defined!');
  } else {
    // Everything is ok
    console.log(req.body.message);
    res.status(200).end();
  }
};

Firebase example:
exports.date = functions.https.onRequest((req, res) => {
  // ...
  res.status(200).send("OK!");
});

So in either case the function body should be the same and the only difference is how the function is exported and deployed.

Most developers use the firebase CLI to deploy / configure cloud functions.

Ah, good point! I noticed functions I developed with a Firebase App actually show up in the GCF dashboard. So it wouldn't be that weird for Probot to use the Firebase SDK to do some of those things? Mostly I really like how Firebase functions allow you to easily proxy https://[firebaseapp].com/function over to a function that would otherwise have a URL like https://us-central1-[project].cloudfunctions.net/function

Well as a Firebase team member I am biased, but no I don't think that would be strange at all.  Every Firebase project is a GCP project under the hood and resources like Cloud Functions appear in both places.
And yes if you want any of the cool tricks like proxying to a custom domain, you'll want to go with the Firebase "view" of functions.

I'm definitely a +1 to using one SDK for both vanilla GCF and Firebase. My only concern is that some folks will say "But I just want functions, I don't want the other Firebase overhead"; are there any disadvantages to a Firebase function vs GCF? Or literally just more opt-in features (which is what I think is the case)?

using one SDK

@tcbyrd, do you think this will mean pulling in those SDKs into probot/probot, or will probot.serverless() just let the user know to install the required SDK? I realize you haven't had a chance to think deeply about this yet, just posing the question in advance.

@JasonEtco The only "disadvantage" I can think of is you need to have imported your GCP project into the Firebase console (or created it there originally).  This means a few more APIs will be auto-enabled and some free resources may be provisioned on your behalf (like an empty Firebase database) but none of this will cost the developer any extra money nor will it affect the speed/efficiency of their Cloud Functions.

none of this will cost the developer any extra money nor will it affect the speed/efficiency of their Cloud Functions.

Awesome, that's what I was hoping for! In that case, I see no reason why we would need to build two severless paths for GCF and Firebase individually.

@JasonEtco What I'm hoping we can accomplish with any cloud SDKs is to use inherent knowledge of what's available in the execution environment to avoid bringing in any dependencies that are already available.
A few examples:

A Firebase developer will deploy functions from a Firebase project, which means they probably already have the firebase package as a dependency.
A Lambda function's execution environment includes the necessary libraries for connecting to other AWS services.
Azure functions have bindings available to various other Azure services.

The way I see it working, deploying a Probot serverless function is basically a way to add the GitHub APIs to those platforms, so any Probot function you deploy would be able to talk to GitHub as easily as it talks to other native platform services.

Hey folks! Just want to update you all: @tcbyrd and I are working on a probot.serverless() method over in #473. It isn't there right this second, but Firebase functions are on our list of APIs to support out of the box. It'd work sort of like this:
exports.myBot = functions.https.onRequest(probot.serverless(myPlugin, 'gcf'))

We still have some things to do over in that PR so feel free to jump in and give feedback on the GCF/Firebase side of things 🙌

@JasonEtco thanks for the update, that proposed integration looks perfect!  I'll comment if I see anything/

On that note, does it feel acceptable here to leave the provider argument as gcf? It feels ok to me for the firebase onRequest method to wrap a gcf function handler.

@tcbyrd yeah that seems ok to me.  In the end they're the same product.  However:

Many Firebase customers have no idea they're using GCF, so maybe to reduce cognitive load we could add a firebase argument that is just an alias for gcf.
While right now those two platforms handle HTTP functions basically the same, there's no guarantee this will remain the case.  In fact I'd bet that they do diverge over time since one of the main things Firebase does on top of GCF is give you an opinionated developer experience.  So you may want to author this in such a way that the assumption "gcf == firebase" is not permanent.


Recaptcha should support strict CSP style-src rules.

The documentation now advice developers to enable style-src='unsafe-inline'.
Should not Recaptcha give an alternative that does not require developers to lower their sites security?

is there any chance that this issue wil be solved someday?

The reCaptcha FAQ claims that adding a noonce to the initial script tag will allow reCaptcha to work with CSP: link here.
However, my own testing has shown that while the external scripts are loaded correctly, the inline styles are still broken, and thus the widget becomes unusable.

After doing some research, it appears that inline styles are valid in a strict CSP policy, but only if they were set by JavaScript. Link.
So while

 is invalid under a strict CSP policy,
`

`
achieves the same effect and is perfectly valid.
Could the reCaptcha styles be set this way?

FYI, this has not worked for me. I'm using ASP.NET, and using NWebsec to create a nonce. I can confirm that once my page loads, the nonce attribute has been added to the DOM element and the response headers contain that same nonce, but that rule does not apply to the style sheets that the api script tries to load.
The unsafe-inline directive works, but my employer would never approve that. Will report back if I find a solution.

Nudging this issue. It sort of bums out Google's whole stance on security. I refuse to change my Content Security Policy - impacting my site's security, simply because Google refuses to get with the times.

@bradleyhodges Same here. I'm not allowing inline styles just for recaptcha. Last commit was in March (nine months ago at time of writing), so development seems to have all but died?

Absolutely.. project is definitely dead, but I’m pretty sure that this repo is for the PHP library alone; meaning that we’d have to find another way to get Google’s attention.
It’s still a massive disappointment to see that Google isn’t maintaining security across the entire project. There isn’t even a way to specify a nonce or CSP compliance policy with their Javascript library, and that documentation is on Google’s own website.

I'll try setting a CSP on the demo and see what happens.

I've been playing around locally and it would be useful to hear some feedback on what people are looking for here. You can take a quick look at the csp-example branch where I'm doing this:
$recaptchaNonce = base64_encode(openssl_random_pseudo_bytes(16));
$inlineNonce = base64_encode(openssl_random_pseudo_bytes(16));
$gaIncNonce = base64_encode(openssl_random_pseudo_bytes(16));
$gaCfgNonce = base64_encode(openssl_random_pseudo_bytes(16));

header("Content-Security-Policy: "
    ."script-src 'nonce-".$inlineNonce."' 'nonce-".$recaptchaNonce."' 'nonce-".$gaIncNonce."' 'nonce-".$gaCfgNonce."' 'strict-dynamic'; "
    ."object-src 'none'; "
    ."base-uri 'none'; "
);

To fire off a header:
Content-Security-Policy: script-src 'nonce-XGgRBiS8q/NL9/hMQaTUtQ==' 'nonce-6Hei0z/rbjQEvwHgCc7wXg==' 'nonce-5FQCJydN0DcsTkrGzCFU8g==' 'nonce-HS3M7LHHGSK6b5gxt01gmg==' 'strict-dynamic'; object-src 'none'; base-uri 'none';

Including the library with

Generating

I appreciate this is a very simple example, so it would be helpful to see what you're putting in your actual policies to understand where this doesn't work.

@rowan-m, the reason your example works and ours don't is that we're setting style-src and not setting 'unsafe-inline'. The script itself runs, but the styling is broken and we get a bunch of CSP errors.
If you want to know why we're setting style-src, it's because third-party-css is not safe.

@IanOliver Only problem with that is that if Google ever change their CSS, your hashes will no longer match. And Google change their stuff a lot...

@Sora2455 Yes, this is something I should have mentioned - very true.
As far as I'm aware, the CSS for reCAPTCHA hasn't changed in a long time, and hopefully if v3 is being concentrated on, maybe v2 will be left as-is. Maybe :)

@IanOliver Hi! I have tried your hashes, it's not working on my app

@arelaxend some are the same on my blog, some aren't. You'd have to test with a Content-Security-Policy-Report-Only to determine yours.

@borisschapira thank you, i will test this later, since i don't know how to send headers via React

@arelaxend First, you don't send headers in React. You send them through whatever platform you're hosting React in - Node.JS, ASP MVC, ASP.NET, PHP, Ruby on Rails, etc.
Second, if the hashes are different for different people, Google might very well be delivering different CSS for different people, making hashing near-impossible.

@sora2455 yes indeed, that’s why I found nothing about this! It uses nodejs. Thank you for the feedback

@rowan-m I kindly ask: Is there gonna be a solution for this issue? Please, developers don't want to lower their security levels.

@Sora2455 Oh thanks, I didn't notice.
@Virgomax I don't think there will be a solution, as there is also a bug on Chrome preventing the hashes from being recognized by the browser.

I also raised a bug with Chromium recently. The hashes I'd previously published worked perfectly in Chrome 68, and then were affected by this bug in Chrome 69: https://bugs.chromium.org/p/chromium/issues/detail?id=881847

@Sora2455   :O   !!!  I just landed here directly from the search engine and I didn't even see the Readme.md.  Looks like I've been wrong my entire life. Thanks for opening my eyes. ;)  I'll go to swear at some other repo.
@borisschapira that's awful.

Good news - the service has been updated so style-src 'unsafe-inline' is not required. I've tried out a more restrictive CSP on csp-example branch where I'm essentially sending:
Content-Security-Policy:
  default-src 'self';
  script-src 'nonce-rand0m1shValue';
  img-src www.gstatic.com;
  frame-src www.google.com;
  object-src 'none';
  base-uri 'none';

The nonce value is the one being passed to reCAPTCHA in its tag:

I'll leave this issue open for a little while in case there are any questions / comments and I'll also merge a separate CSP example onto master.


Add whereBelongsById to EloquentBuilder

We need this in case we want to find by relationship id, withouth query the model to reduce mysql queries.
Like filtering the model by relationship in controller from FormRequest, in most efficient way.

Tests seem to fail here. Please resubmit this with passing tests, thanks.


SW-5147 Fix participant dropdown by casting search result IDs to numbers and changing the dropdown to reference the record's 'id' instead of 'participantId' because that is the property on the participant record

Cast the search result IDs to numbers
Changing the dropdown to reference the record's id instead of participantId because that is the property on the participant record

#2475  👈
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @nickgraz and the rest of your teammates on  Graphite

Yea it is a bit confusing


Logger startup error

Hi,
if I try to start the logger I get the following error:
C:\node-opcua-logger-master>node logger.js
C:\node-opcua-logger-master\writepump.js:18
this.output = new influx({
^
TypeError: influx is not a constructor
at new WritePump (C:\node-opcua-logger-master\writepump.js:18:16)
at Object. (C:\node-opcua-logger-master\logger.js:11:10)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

forgot to mention:
OS: Windows Server 2016 Standard
NodeJS: 10.16.3 , tried both 64 and 32bit, same result

Hello there, did you run npm install succesfully after cloning?

Yes, and everything seems to be fine

Hi Marco! I've just merged v2 into master, containing lots of fixes and package updates. Could you check it out and see if it works for you?

closing as stale


Fix UI issues and add language switcher to imprint

Short description

This PR fixes the UI of the versioning view, makes some small changes to the page form and adds the language switcher to the imprint form.
Proposed changes

Change CSS of versioning slider
Add language switcher to imprint form and add check if content has no id
Add some small UI tweaks to the language switcher

Resolved issues

Fixes: #1112 #1111

All changes are included in #1116


0.1 release

tagging @ejhumphrey
any objection to making an actual release out of this and sticking it on pypi?
I think it's stable enough -- the missing test coverage is due to nose/coveralls not handling multi-thread properly.

+1


Fixes for Invoke command and avoiding reboot

Removed Date time inputs to the  schtask command
Cleant up command for fetching details of WinRm on the machine
Making sure we don't fail if Invoke command return in failure.
Note: We are still rebooting on Win2k8 machine; but it is not impacting user scenario

Testing:

Win8.1, Win2012, Win2k8 & Win10
Running as service and running as interactive process
Validated running on Azure RG group as well

Bug fixes:
a. Bug 377098:Deploy task fails at 23:59 PM
b. Bug 378527:We should be using cleaner approach for fetcing WinRM details

looks fine


fix(#1515): handle long text in chip

allow long text in chip

issue is verified on firefox and chrome

:tada: This PR is included in version 1.17.0-alpha.58 :tada:
The release is available on:

npm package (@alpha dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 4.17.0-alpha.29 :tada:
The release is available on:

npm package (@alpha dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 1.21.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 4.21.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 3.0.3 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Synced translations with latest changes/additions of microG

Thanks for your hard work! I've noticed some errors and some strings that IMHO could be improved.
Errors:

self_check_name_perm_granted: The verb "garantisce" (guarantee) is wrong here, this sentence should be translated as "il sistema concede l'autorizzazione a falsificare la firma"
service_status_enabled_short and service_status_disabled_short should be the same as service_status_enabled and service_status_disabled: in Italian we don't have "short" variants for "enabled"/"disabled" like "on"/"off" and the translation you provided for them ("acceso"/"spento") is semantically different. Furthermore, wouldn't sound a bit weird to say that "La registrazione del dispositivo è spenta"?
pref_checkin_enable_summary: I think the verb "strip" would be better translated as "rimuovere" in this case. Also, "other than" should be translated as "oltre a", not as "piuttosto che" (which is "rather than")
gcm_unregister_confirm_title: should start with "Annullare la registrazione di", not with "De-registrazione"
pref_snet_status_official_summary: "root" should be left as it is ("amministrazione" is too broad and "root" is always used untranslated). I would also replace "privo" with "senza" to avoid the pun "privo di privilegi"
self_check_resolution_fake_sig_perm: typo "utlizzare" instead of "utilizzare"
pref_push_app_wake_for_delivery_summary: keep "background" untranslated! This is a technical term
auth_before_connect: "utilizzate" should be "utilizza"

Things that IMHO can be improved:

self_check_resolution_perm_granted: I would replace "questo è un indice sintomatico del fatto che" with "ciò indica che" (less wordy and clearer)
pref_gcm_confirm_new_apps_summary: I would replace "Interroga l'utente" with "Chiedi conferma all'utente" (it fits better)
self_check_resolution_correct_sig: starting the sentence with "O" doesn't sound good IMO, I would go for "L'applicazione X non è compatibile oppure [...]" (without comma before "oppure")
"Play Games" can be translated with "Play Giochi" in all places
In places where you use "Consulta la documentazione su [...]", I think that "Consulta la documentazione per conoscere [...]" would sound much more natural

Thank you very much for the catches and all your points, I fixed all the errors and agree with your improvements.
Only one thing:
gcm_unregister_confirm_title: here I used "Annulla la registrazione" and not "Annulla la registrazione di" because the dialog is already inside the app dedicated page.

Thanks! There are still some errors in your latest commit:

games_info_content (line 75): you forgot to translate one occurrence of "Play Games"
you changed the string self_check_name_fake_sig_perm, which was correct (the one that said "Il sistema supporta la falsificazione della firma"). The string with the wrong translation was self_check_name_perm_granted (line 98, "Il sistema garantisce la falsificazione della firma").
If you want to make it shorter than "il sistema concede l'autorizzazione a falsificare la firma", I would use "il sistema consente la falsificazione la firma" instead of "concede la falsificazione la firma"

gcm_unregister_confirm_title: here I used "Annulla la registrazione" and not "Annulla la registrazione di" because the dialog is already inside the app dedicated page.

Here you are referring to string gcm_unregister_app. The error is at line 169, where the string says De-registrazione <xliff:g example="F-Droid">%1$s</xliff:g>?. That string was not updated when you changed "de-registrare" with "annullare la registrazione".
I've seen that "Consulta la documentazione su" has not been replaced with "Consulta la documentazione per conoscere". Did you forget that or did you decide not to change that?

All right, damn me

No problem! Also I didn't notice that "Consulta la documentazione per conoscere" was missing only in one place, my fault 😅.
@mar-v-in I think this is ready for merge.

@Fs00 feel free to take a look also at https://github.com/microg/UnifiedNlp/pull/189 :)
I assume there are some more strings that will be translatable in the future for microG (I see that some actions and voices are still missing), so I will put more work when needed


no timeout if wrong IP

I have problems with the DHCP server so my Tuya device changes the IP quite often.
I want to detect the "connect timeout" situation, but get a "KeyError" exception instead
Any ideas ?
My code, quite simple :
d = tinytuya.OutletDevice( DEVICE_ID, DEVICE_IP, DEVICE_KEY )     # connect to device and fetch state
d.set_version(3.3)
d.set_socketRetryLimit(2)                                      # set retry count limit [default 5]
d.set_socketTimeout(2)                                         # set connection timeout in seconds [default 5]
d.set_sendWait(1)                                                 # seconds to wait after sending for a response

try:
        dps = d.detect_available_dps()
except KeyError:
        print( "key error - bye" )
        sys.exit()

You could have tinytuya scan for the IP address each time you use it:
d = tinytuya.OutletDevice( DEVICE_ID, "Auto", DEVICE_KEY )     # connect to device and fetch state
d.set_version(3.3)
d.set_socketRetryLimit(2)                                      # set retry count limit [default 5]
d.set_socketTimeout(2)                                         # set connection timeout in seconds [default 5]
d.set_sendWait(1)                                                 # seconds to wait after sending for a response

try:
        dps = d.detect_available_dps()
except:
        print( "error - bye" )
        sys.exit()

There's no way to do that directly, but you can fake it by checking the return value:
d = tinytuya.OutletDevice( DEVICE_ID, DEVICE_IP, DEVICE_KEY )     # connect to device and fetch state
d.set_version(3.3)
d.set_socketRetryLimit(2)                                      # set retry count limit [default 5]
d.set_socketTimeout(2)                                         # set connection timeout in seconds [default 5]
d.set_sendWait(1)                                                 # seconds to wait after sending for a response

try:
        dps = d.detect_available_dps()
        if not dps:
                raise KeyError('Not Found')
except KeyError:
        print( "key error - bye" )
        sys.exit()

You could have tinytuya scan for the IP address each time you use it:
d = tinytuya.OutletDevice( DEVICE_ID, "Auto", DEVICE_KEY )     # connect to device and fetch state
d.set_version(3.3)
d.set_socketRetryLimit(2)                                      # set retry count limit [default 5]
d.set_socketTimeout(2)                                         # set connection timeout in seconds [default 5]
d.set_sendWait(1)                                                 # seconds to wait after sending for a response

try:
        dps = d.detect_available_dps()
except:
        print( "error - bye" )
        sys.exit()

This is fantastic !!!
Where is this feature documented ?

Did that work for you @ramonetnet ?  Keep in mind that it can be slow (it waits for the device to emit its discovery packet), but can be helpful for devices with low DHCP lease times.
As for documentation... Oops. 😊  I'll tag this for us to add something to README.

Hi, Jason - thanks for your help.
It is working right now, yes
I dont mind if it's slow, as I read the temperature .. once every 15
minutes.
The device is (nice "device scanner" of yours) :
{
    "name": "termometre",
    "id": "bfe483b0ac18224f06dqww",
    "key": "fb9d5ba086f97ed4",
    "mac": "1c:90:ff:da:ad:42",
    "category": "wsdcg",
    "product_name": "LED WIFI T&H Sensor",
    "product_id": "o2c5btmpepi9pzf8",
    "biz_type": 18,
    "model":

"\u63d2\u7535\u6b3e\u6a21\u7ec4\u5f00\u53d1\u5e38\u4f9b\u7535\u6b3e",
"sub": false,
"icon": "
https://images.tuyaeu.com/smart/icon/ay15427647462366edzT/1e738d42af8bebcca4f802f0074f134d.png
"
},
My problem is not low DHCP lease times, but router power off occuring once
a week,
and it loses (sometimes) the MAC to IP table.
Never mind - I got the solution I needed.
Documentation : I found a place where you mention this parameter :
in this page

https://pypi.org/project/tinytuya/1.12.5/

it says ...
Classes OutletDevice(dev_id, address, local_key=None, dev_type='default')
CoverDevice(dev_id, address, local_key=None, dev_type='default')
BulbDevice(dev_id, address, local_key=None, dev_type='default') dev_id
(str): Device ID e.g.<PHONE_NUMBER>1234567890 address (str): Device Network IP
Address e.g. <IP_ADDRESS> or <IP_ADDRESS> to auto-find local_key (str, optional):
The encryption key. Defaults to None. dev_type (str): Device type for
payload options (see below)
:-))
Missatge de Jason Cox @.***> del dia ds., 29 d’abr.
2023 a les 4:10:

Did that work for you @ramonetnet https://github.com/ramonetnet ? Keep
in mind that it can be slow (it waits for the device to emit its discovery
packet), but can be helpful for devices with low DHCP lease times.
As for documentation... Oops. 😊 I'll tag this for us to add something to
README.
—
Reply to this email directly, view it on GitHub
https://github.com/jasonacox/tinytuya/issues/337#issuecomment-1528484977,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AQU74ICM4MEOY436VHGYSB3XDR2A3ANCNFSM6AAAAAAXKXCNHU
.
You are receiving this because you were mentioned.Message ID:
@.***>

Thanks @ramonetnet !  I just added a note to the example in the README as well. Hopefully this will help others.
https://github.com/jasonacox/tinytuya#programming-with-tinytuya
Programming with TinyTuya
After importing tinytuya, you create a device handle for the device you want to read or control.  Here is an example for a Tuya smart switch or plug:
import tinytuya

# Connect to Device
d = tinytuya.OutletDevice(
    dev_id='DEVICE_ID_HERE',
    address='IP_ADDRESS_HERE',      # Or set to 'Auto' to auto-discover IP address
    local_key='LOCAL_KEY_HERE',
    version=3.3)

# Get Status
data = d.status()
print('set_status() result %r' % data)

# Turn On
d.turn_on()

# Turn Off
d.turn_off()

Hi, Jason - the comment seems good to me
A question, just to know : is "Auto" equivalent to "<IP_ADDRESS>" ?
Have a nice day and thanks a lot for your job.
Missatge de Jason Cox @.***> del dia ds., 29 d’abr.
2023 a les 17:28:

Thanks @ramonetnet https://github.com/ramonetnet ! I just added a note
to the example in the README as well. Hopefully this will help others.
https://github.com/jasonacox/tinytuya#programming-with-tinytuya
Programming with TinyTuya
After importing tinytuya, you create a device handle for the device you
want to read or control. Here is an example for a Tuya smart switch or plug:
import tinytuya
Connect to Deviced = tinytuya.OutletDevice(
dev_id='DEVICE_ID_HERE',
address='IP_ADDRESS_HERE',      # Or set to 'Auto' to auto-discover IP address
local_key='LOCAL_KEY_HERE',
version=3.3)

Get Statusdata = d.status() print('set_status() result %r' % data)
Turn Ond.turn_on()
Turn Offd.turn_off()
—
Reply to this email directly, view it on GitHub
https://github.com/jasonacox/tinytuya/issues/337#issuecomment-1528812838,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AQU74IHQZ63ARAOP3BLTH6LXDUXS3ANCNFSM6AAAAAAXKXCNHU
.
You are receiving this because you were mentioned.Message ID:
@.***>

Yes, that works as well (and others) but "Auto" seemed the most intuitive.  The code that controls it is here:
https://github.com/jasonacox/tinytuya/blob/06bf90403d7e046d54906509189466efc167dc0c/tinytuya/core.py#L784-L792

FWIW - if you have a dns server that allows assigning hostnames you can use that instead. Tinytuya resolves them fine.
For example I have a cree light given the hostname "kitchen.light.canopy-1.iot.arpa" which always points to the ip based on the MAC address of whatever light I have plugged into the canopy 1 socket.
Beats dealing with dhcp assignments anyway while maintaining centralized dynamic network flexibility (DHCP).

Thanks @bradennapier  - What DNS server or router are you using that sets those iot.arpa records?

UniFi udm  pro but in general using hostname resolution is useful over IP


Lock file version 3

I believe per the latest documentation of that lock files version 3 are supported too.  I'm not sure if the smell is outdated or my understading is wrong.
https://docs.veracode.com/r/Run_an_Agent_Based_Scan_for_NPM

Thanks for bringing this up, and it looks like you're correct! I will remove this smell check :)

Created a new release that doesn't report lockfile v3 as a "smell" anymore.


fix: required fields on nested object was missing

For objects with nested objects that are required... the required fields were not being passed in.
There was simply a line missing, added. Unit test added.
What was happening before was...
      {
        in: 'body',
        name: 'teamsPostPost',
        required: true,
        schema: {
          type: 'object',
          properties: {
            team: {
              type: 'object',
              required: ['name', 'isPremium'],
              properties: {
                name: {type: 'string', minLength: 1},
                isPremium: {type: 'boolean'},
              },
            },
            invitations: {
              type: 'array',
              items: {
                type: 'object',
                required: ['roleId'],
                properties: {
                  id: {type: 'number'},
                  name: {type: 'string'},
                  email: {type: 'string'},
                  roleId: {type: 'number'},
                  invitationLink: {type: 'string'},
                  action: {
                    type: 'string',
                    enum: ['create', 'update', 'delete'],
                  },
                },
              },
            },
            invitationsLanguage: {type: 'string'},
          },
        },
      },

Resulted in a Joi output of:
{
    body: Joi.object({
      team: Joi.object({
        name: Joi.string().min(1).allow(null),
        isPremium: Joi.boolean().allow(null),
      }).allow(null),
      invitations: Joi.array().items(
        Joi.object({
          id: Joi.number().allow(null),
          name: Joi.string().allow('').allow(null),
          email: Joi.string().allow('').allow(null),
          roleId: Joi.number().allow(null),
          invitationLink: Joi.string().allow('').allow(null),
          action: Joi.string()
            .allow('')
            .valid('create', 'update', 'delete')
            .allow(null),
        }).allow(null)
      ),
      invitationsLanguage: Joi.string().allow('').allow(null),
    }),
  },

It should have been:
    'body': Joi.object({
      'team': Joi.object({
        'name': Joi.string().min(1).required(),  // <<< note the required fields here!!
        'isPremium': Joi.boolean().required(),
      }).allow(null),
      'invitations': Joi.array().items(Joi.object({
        'id': Joi.number().allow(null),
        'name': Joi.string().allow('').allow(null),
        'email': Joi.string().allow('').allow(null),
        'roleId': Joi.number().required(),
        'invitationLink': Joi.string().allow('').allow(null),
        'action': Joi.string().allow('').valid('create', 'update', 'delete').allow(null),
      }).allow(null)),
      'invitationsLanguage': Joi.string().allow('').allow(null),
    }),

This was somehow missing all this time and never reported.

@acrontum-sanchez you might want to communicate this to the dev team. It should not cause any issues, but, if there is a 3rd party API that is generated with generate-it via openapi 3 there is a chance that some incoming data is not being being "required.

awesome, will publish it now then


Can't update the certificate: "fullchain.pem: No such file or directory"

I tried several values, but it keeps telling me fullchain.pem is missing.

Maybe some additional logs would help…

This is a mistake from mine. #5 should address it.
It basically assumed you already had generated a certificate in the past. I made its name clearer by renaming it from fullchain.pem to certificate.pem (as well as key.pem to private-key.pem).

It works! \o/
Thanks!


docs(projectNEWM): Map requirements to support projectNEWM

Requirements for Storj to support projectNEWM.

@mark-stopka given the answer in #81, is this issue still valid?

Yes and no... As one of my Finnish friends used to day, I will transfer it elsewhere, I put it here accidentally...

closing the issue since no actionable task are involved, but it still remains accesible if you need it for moving elsewhere.


UI preferences Bug?

When I tap some or none , It becomes this.  "the master" branch.

Yeah -- this preferences screen is absolutely terrible, but there shouldn't be any reason to use it anymore... so I'm gonna leave it. I'll redo it whenever I need people to use preferences again

Thanks.


Pipeline : minified CSS file altered and not applied

When I activate the css_pipeline and css_minify, the css file is properly created but not applied on the website.
system.yaml
assets:
  css_pipeline: true
  css_minify: true
  css_rewrite: false

My Website when I activate the minify option:

My head stylesheet link :

My source with devtools :

But then when I give a closer look to the CSS file, it seems to be altered. Look to the @ import url, sometime the letter "u" disapear. (It's not the full code, only the first few lines)
@import url(//hello.myfonts.net/count/3b748a);@import u;@import url(https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,300;0,700;1,400;1,700&display=swap);rl("https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;
rl(https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,300;0,700;1,400;1,700&display=swap);0,700;1,400&family=PT+Sans&display=swap");@font-face{font-family:"NoahHead-Light";src:url(../assets/fonts/webFonts/NoahHead-Light/font.woff2) format("woff2"),url(../assets/fonts/webFonts/NoahHead-Light/font.woff) format("woff")}@font-face{font-family:"NoahHead-UltraLight";src:url(../assets/fonts/webFonts/NoahHead-UltraLight/font.woff2) format("woff2"),url(../assets/fonts/webFonts/NoahHead-UltraLight/font.woff) format("woff")}@font-face{font-family:"NoahHead-ExtraBold";src:url(../assets/fonts/webFonts/NoahHead-ExtraBold/font.woff2) format("woff2"),url(../assets/fonts/webFonts/NoahHead-ExtraBold/font.woff) format("woff")}@font-face{font-family:"Noah-Bold";src:url(../assets/fonts/webFonts/Noah-Bold/font.woff2) format("woff2"),url(../assets/fonts/webFonts/Noah-Bold/font.woff) format("woff")}@font-face{font-family:"NoahHead-Heavy";src:url(../assets/fonts/webFonts/NoahHead-Heavy/font.woff2) format("woff2"),url(../assets/fonts/webFonts/NoahHead-Heavy/font.woff) format("woff")}*{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}*::-moz-selection{background:#95bbd3}*::selection{background:#95bbd3}html{font-size:62.5%;scroll-behavior:smooth}

There are a lot of differences with the minified file generated by sass
@import url("//hello.myfonts.net/count/3b748a");@import url("https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,700;1,400;1,700&display=swap");@import url("https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,300;0,700;1,400&family=PT+Sans&display=swap");@font-face{font-family:"NoahHead-Light";src:url("../assets/fonts/webFonts/NoahHead-Light/font.woff2") format("woff2"),url("../assets/fonts/webFonts/NoahHead-Light/font.woff") format("woff")}@font-face{font-family:"NoahHead-UltraLight";src:url("../assets/fonts/webFonts/NoahHead-UltraLight/font.woff2") format("woff2"),url("../assets/fonts/webFonts/NoahHead-UltraLight/font.woff") format("woff")}@font-face{font-family:"NoahHead-ExtraBold";src:url("../assets/fonts/webFonts/NoahHead-ExtraBold/font.woff2") format("woff2"),url("../assets/fonts/webFonts/NoahHead-ExtraBold/font.woff") format("woff")}@font-face{font-family:"Noah-Bold";src:url("../assets/fonts/webFonts/Noah-Bold/font.woff2") format("woff2"),url("../assets/fonts/webFonts/Noah-Bold/font.woff") format("woff")}@font-face{font-family:"NoahHead-Heavy";src:url("../assets/fonts/webFonts/NoahHead-Heavy/font.woff2") format("woff2"),url("../assets/fonts/webFonts/NoahHead-Heavy/font.woff") format("woff")}*{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}*::-moz-selection{background:#95bbd3}*::selection{background:#95bbd3}

And in the devtools at a certain point, the code becomes white and stays white until the end. Is this why it is not properly interpreted by the browsers?

usually this is caused by some improper syntax in one of the css files

first what version of Grav is this?
second, is it possible to get a mini version of your site? something i can test to relocate this? it really only needs the css files and the theme or at least the bit where you include the various css files.

I use grav 1.7.0-rc.13
@rhukster I gave you access to my repo so you can have a look

Ok turns out it was some bad regex getting caught up with the ; in your import statements.


[C] Add protobuf implementation to C Command Samples

Purpose

Adds serialization and deserialization of protobuf payloads in the C command samples using the protobuf-c library
Please ignore *.pb-c.* files, they are auto generated

Checklist

[x] I have read the contribution guidelines.
I submitted this PR against the correct branch:

[x] This pull-request is submitted against the main branch.
[x] I have merged the latest main branch prior to submission and re-merged as needed after I took any feedback.
[x] I will squashed my changes into one with a clear description of the change when I complete the PR.

Does this introduce a breaking change?

[ ] Yes
[x] No

Pull Request Type
What kind of change does this Pull Request introduce?

[ ] Bugfix
[x] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Documentation content changes
[ ] Other... Please describe:

How to Test

...

What to Check
Verify that the following are valid

...

Other Information

the door lock example, as shown, is dangerous and has multiple (physical) security consequences (e.g. opening the door a few hours after the request was made is not a good thing).

This is a sample to show the RPC pattern in action, it's not intended to be the ultimate reference to implement a safe unlock mechanism for production grade vehicle manufacturers. It's not only about the time sync, also about AuthN/AuthZ etc..
We inherit the scenario description from EG, and I believe it's a good sample, easy to understand and with a clear purpose.
Do you have a better suggestion?

the request isn't expired - door should not unlock if the original time was more than 5 seconds ago (requestor app should clearly wait for 5 seconds to indicate that there is a possibility that the door can open).

AFAIK we are not using persistent sessions in this sample, so the client expects the server to be online when the command is invoked.
In which case the command will be executed at a later time? do you have a repro?

Do you have a better suggestion?

Yes - I've left suggestions in throughout my comments about these issues. We should at least clearly explain the constraints / dangers.

AFAIK we are not using persistent sessions in this sample, so the client expects the server to be online when the command is invoked.

That would indeed solve the issue when the RPC server is offline but not the case when the MQTT broker is either busy, disconnected from the network or shut down for any reasons (crash, maintenance, etc).

In which case the command will be executed at a later time? do you have a repro?

There are (at least) two cases: broker failure and server failure:
Broker failure

Start the broker with persistence for QoS1.
Start the client and server.
Client makes a request.
Place a breakpoint on the broker ACK (which means that the message was persisted).
Kill the broker process or disconnect it from the network.
After some time (minutes, hours, etc) resume normal broker operation.
Observe the QoS 1 message being now sent to the serverRPC.

Note that if messageExpiry is configured, depending on broker timer implementation, only killing the broker process would result in the message being transmitted later.
Server failure
In this case, the server receives the message but it either:

crashes right after receipt and before ACK.
has a half-opened (receive only) connection (and so ACKs cannot be sent back to the broker).

In case 2, depending on time to recover, the server may connect at a later time, receiving the (delayed) unack-ed QoS1 request.
In case 1, the client will eventually be disconnected (and should disconnect itself) after keepalive failure. On re-connect (i.e. when network is connected both ways), the QoS1 message will be delivered again (delayed).

@CIPop @rido-min, I think a lot of the concerns brought up here apply to all of the command samples and not just the C sample. I'll open up a task on our board to discuss and decide what pattern to align on for all of the languages, to be addressed in a future PR. For now, the C sample has parity with the other languages in regards to security, and I've added a disclaimer in the readme > NOTE: This code is a basic example of the request-response messaging pattern. It is not a secure solution for unlocking a vehicle without further security considerations.

My preference for generated code is to have it generated pre-build: that way it can't ever run out of sync with the checked-in definitions.

Agree, however we have not been able to find a way to call the proto generator from CMake, and a result  I logged #63
As a workaround, I think it might be ok to commit the generated files.
/c @vaavva


Regarding potential missing references

Hi, you have done an excellent job, and it would be perfect if you could include highly relevant references.
The following two papers demonstrate the effectiveness of pre-training visual prompts in the few-shot scenario and are closely related.
[1] VPPT: Visual Pre-Trained Prompt Tuning Framework for Few-Shot Image Classification
[2] PVP: Pre-trained Visual Parameter-Efficient Tuning

Hi @bityangke, thanks for your reminder, and we will add the reference works in the main text. 😊


Publishing

Repro steps:

VSCode Ubuntu WSL 18.04 project, only differences are ran the environment's python3.6 -m pip install -U on azure_cli and pylint, then freeze > requirements.txt, and removed the pkg-resources=0.0.0 line.
Ran func azure functionapp publish meruacrmirror --build-native-deps --no-bundler, got errors in portal. Deploy to Function App (e.g. clicking in VSCode) failed with below.

Action: azureFunctions.deploy
Error type: BadRequest
Error Message: Encountered an error (ServiceUnavailable) from host runtime.
Version: 0.17.1
OS: linux
Product: Visual Studio Code
Product Version: 1.35.1
Language: en

Call Stack
a.pipeline extension.bundle.js:262:2558997
s extension.bundle.js:262:110821
s extension.bundle.js:164:25754
extension.bundle.js:164:26994
o extension.bundle.js:208:58625
extension.bundle.js:164:24675
$.t.headersOnly.t.streamedResponse.t.body.function.t.body.pipe.a [as _callback] extension.bundle.js:1:605866
$.t._callback.t.callback.t.callback extension.bundle.js:238:5462
$.emit events.js:182:13
$.<anonymous> extension.bundle.js:238:18275
$.emit events.js:187:15
IncomingMessage.<anonymous> extension.bundle.js:238:17117
Object.onceWrapper events.js:273:13
IncomingMessage.emit events.js:187:15
endReadableNT _stream_readable.js:1090:12
process._tickCallback next_tick.js:63:19

As soon as update requirements.txt with the venv's pip output, fails

Can no longer deploy even provided template python azure function to function app.

@paeppers if the default template is failing to deploy - perhaps something is wrong with the function app in Azure? How did you create it - from VS Code or the portal? What region? If you create a new function app does it work?


PyPI classifiers not working, upload universal wheel

I noticed that for some reason this package shows up as "Not Python 3 ready" on http://py3readiness.org/ Looking at this on PyPI, there are no classifiers listed on the entry.
Also, if you're mucking around with PyPI, could you upload a universal wheel (rather than just for Py2?).

The trove classifiers were supplied as a tuple rather than a list. PyPI didn't like that, for some reason. Changed it to a list and it now works.
Also uploaded a universal wheel.


Document Array.prototype extensions in API

Array.prototype.$set & Array.prototype.$remove

There's no logical place on the API page for those. Any suggestions?

I'd add a dedicated section called Array Extension Methods.

Is this done?

This can be closed considering that Array Extension Methods was added in the v1 docs.
Too exemplified in the v1 guide/lists.