Commit Graph

2605 Commits

Author SHA1 Message Date
5471d10256 Test building by digest #6
Some checks failed
Build Docker Image / Create Multi-arch Manifest (3.10) (push) Blocked by required conditions
Build Docker Image / Build ARM64 (3.10) (push) Has been cancelled
2024-12-10 21:11:09 +02:00
584a287955 Test building by digest #5
Some checks failed
Build Docker Image / Create Multi-arch Manifest (3.10) (push) Blocked by required conditions
Build Docker Image / Build AMD64 (3.10) (push) Has been cancelled
Build Docker Image / Build ARM64 (3.10) (push) Has been cancelled
2024-12-10 21:10:19 +02:00
a6487e5a75 Test building by digest #4
All checks were successful
Build Docker Image / Build ARM64 (3.10) (push) Successful in 1m26s
Build Docker Image / Build AMD64 (3.10) (push) Successful in 8m37s
Build Docker Image / Create Multi-arch Manifest (3.10) (push) Successful in 8s
2024-12-08 19:08:27 +02:00
6f0dc76bfc Test building by digest #3
Some checks failed
Build Docker Image / Build ARM64 (3.10) (push) Successful in 1m26s
Build Docker Image / Build AMD64 (3.10) (push) Has been cancelled
2024-12-08 19:02:29 +02:00
aec772940e Test building by digest #2
Some checks failed
Build Docker Image / Build ARM64 (3.10) (push) Successful in 1m25s
Build Docker Image / Build AMD64 (3.10) (push) Successful in 8m38s
Build Docker Image / Create Multi-arch Manifest (3.10) (push) Failing after 26s
2024-12-08 15:49:19 +02:00
097a8c49ab Test building by digest
All checks were successful
Build Docker Image / Build ARM64 (3.10) (push) Successful in 1m26s
Build Docker Image / Build AMD64 (3.10) (push) Successful in 8m39s
Build Docker Image / Create Multi-arch Manifest (3.10) (push) Successful in 15s
2024-12-08 15:31:27 +02:00
d93cbda299 Try to build separate
Some checks failed
Build Docker Image / Build ARM64 (3.10) (push) Successful in 2m28s
Build Docker Image / Build ARM64 (3.12) (push) Successful in 2m29s
Build Docker Image / Build ARM64 (3.11) (push) Successful in 2m31s
Build Docker Image / Build ARM64 (3.13) (push) Successful in 1m27s
Build Docker Image / Build AMD64 (3.10) (push) Successful in 9m21s
Build Docker Image / Build AMD64 (3.11) (push) Successful in 9m31s
Build Docker Image / Build AMD64 (3.12) (push) Successful in 9m31s
Build Docker Image / Build AMD64 (3.13) (push) Successful in 9m19s
Build Docker Image / Create Multi-arch Manifest (3.10) (push) Failing after 16s
Build Docker Image / Create Multi-arch Manifest (3.11) (push) Failing after 14s
Build Docker Image / Create Multi-arch Manifest (3.12) (push) Failing after 13s
Build Docker Image / Create Multi-arch Manifest (3.13) (push) Failing after 14s
2024-12-08 13:56:34 +02:00
bd7cfc17a2 Try to build separate
Some checks failed
Build Docker Image / Build AMD64 (3.10) (push) Failing after 27s
Build Docker Image / Build AMD64 (3.11) (push) Failing after 28s
Build Docker Image / Build AMD64 (3.13) (push) Has been cancelled
Build Docker Image / Build ARM64 (3.13) (push) Has been cancelled
Build Docker Image / Build AMD64 (3.12) (push) Has been cancelled
Build Docker Image / Create Multi-arch Manifest (3.10) (push) Has been cancelled
Build Docker Image / Create Multi-arch Manifest (3.11) (push) Has been cancelled
Build Docker Image / Create Multi-arch Manifest (3.12) (push) Has been cancelled
Build Docker Image / Create Multi-arch Manifest (3.13) (push) Has been cancelled
Build Docker Image / Build ARM64 (3.11) (push) Has been cancelled
Build Docker Image / Build ARM64 (3.10) (push) Has been cancelled
Build Docker Image / Build ARM64 (3.12) (push) Has been cancelled
2024-12-08 13:54:01 +02:00
bd08d0e55b Tried to fix max-concurrent
Some checks failed
Build Docker Image / Build and Push (3.10) (push) Failing after 54m45s
Build Docker Image / Build and Push (3.12) (push) Has been cancelled
Build Docker Image / Build and Push (3.13) (push) Has been cancelled
Build Docker Image / Build and Push (3.11) (push) Has been cancelled
2024-12-08 12:42:22 +02:00
eb269b0261 Added Python 3.13
Some checks failed
Build Docker Image / Build and Push (3.10) (push) Failing after 45m22s
Build Docker Image / Build and Push (3.11) (push) Failing after 50m42s
Build Docker Image / Build and Push (3.12) (push) Failing after 1h12m36s
Build Docker Image / Build and Push (3.13) (push) Failing after 36m37s
2024-10-08 22:39:51 +03:00
53b4bde474 Bump unit to 1.33.0
All checks were successful
Build Docker Image / Build and Push (3.10) (push) Successful in 47m21s
Build Docker Image / Build and Push (3.11) (push) Successful in 48m5s
Build Docker Image / Build and Push (3.12) (push) Successful in 48m10s
2024-09-21 14:11:35 +03:00
19d0cc5c31 Fixed building #3
All checks were successful
Build Docker Image / Build and Push (3.12) (push) Successful in 45m8s
Build Docker Image / Build and Push (3.11) (push) Successful in 46m25s
Build Docker Image / Build and Push (3.10) (push) Successful in 46m27s
2024-09-15 10:00:45 +03:00
35a9ab83c4 Fixed building #2
All checks were successful
Build Docker Image / Unit with Python ${{ matrix.python-version }} (3.10) (push) Successful in 38m53s
Build Docker Image / Unit with Python ${{ matrix.python-version }} (3.11) (push) Successful in 39m0s
Build Docker Image / Unit with Python ${{ matrix.python-version }} (3.12) (push) Successful in 31m5s
2024-07-20 16:45:40 +03:00
bf711a5f12 Fixed building
All checks were successful
Build Docker Image / build-and-deploy-image (3.10) (push) Successful in 30m47s
Build Docker Image / build-and-deploy-image (3.11) (push) Successful in 30m43s
Build Docker Image / build-and-deploy-image (3.12) (push) Successful in 30m35s
2024-07-20 10:49:17 +03:00
1be88e1973 Removed unit project; use matrix to build
Some checks failed
Build Docker Image / build-and-deploy-image (3.12) (push) Waiting to run
Build Docker Image / build-and-deploy-image (3.11) (push) Waiting to run
Build Docker Image / build-and-deploy-image (3.10) (push) Has been cancelled
2024-07-20 10:48:03 +03:00
a92c5c45e2 Fixed runs
All checks were successful
Build Docker Image / build-and-deploy-image (push) Successful in 1h32m12s
2024-07-08 13:17:12 +03:00
ae01f6599d Added gitea building 1.32.1
Some checks failed
Build Docker Image / build-and-deploy-image (push) Failing after 3m40s
2024-07-08 12:41:33 +03:00
Andrei Zeliankou
48d7917059 Added version 1.32.1 CHANGES 2024-03-21 13:47:41 +00:00
Andrei Zeliankou
3f228d6b6f Generated Dockerfiles for Unit 1.32.1 2024-03-15 15:15:26 +00:00
Andrei Zeliankou
8ca4962d9a Edited changes.xml for the 1.32.1 release 2024-03-15 15:13:59 +00:00
Andrew Clayton
777b7c8782 Wasm-wc: Fix application restarts
Liam reported a problem when trying to restart wasm-wasi-component based
applications using the /control/applications/APPLICATION_NAME/restart
endpoint.

The application would become unresponsive.

What was happening was the old application process(es) weren't
exit(3)ing and so while we were starting new application processes, the
old ones were still hanging around in a non-functioning state.

When we are terminating an application it must call exit(3).

So that's what we do. We use the return value of nxt_unit_run() as the
exit status.

Due to exit(3)ing we also need to now explicitly handle the return on
error case.

Reported-by: Liam Crilly <liam@nginx.com>
Fixes: 20ada4b5c ("Wasm-wc: Core of initial Wasm component model language module support")
Closes: https://github.com/nginx/unit/issues/1179
Tested-by: Liam Crilly <liam@nginx.com>
Tested-by: Danielle De Leo <d.deleo@f5.com>
Co-developed-by: Dan Callahan <d.callahan@f5.com>
Signed-off-by: Dan Callahan <d.callahan@f5.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-03-15 15:12:59 +00:00
Andrei Zeliankou
d7ff6bb4a1 Tests: NJS cacheable variables with access log
Reproduces issue https://github.com/nginx/unit/issues/1169.
2024-03-15 15:12:38 +00:00
Zhidao HONG
6359c74da1 Var: Fix cacheable issue for njs variable access
The variables accessed with JS template literal should not be cacheable.
Since it is parsed by njs engine, Unit can't create indexes on these
variables for caching purpose. For example:

   {
       "format": "`{bodyLength:\"${vars.body_bytes_sent}\",status:\"${vars.status}\"}\n`"
   }

The variables like the above are not cacheable.

Closes: https://github.com/nginx/unit/issues/1169
2024-03-15 15:11:30 +00:00
Andrei Zeliankou
97ff09903b Version bump 2024-03-15 15:10:24 +00:00
Andrei Zeliankou
088117008c Added version 1.32.0 CHANGES 2024-02-27 12:24:44 +00:00
Andrei Zeliankou
ace553dca4 Generated Dockerfiles for Unit 1.32.0 2024-02-27 12:24:44 +00:00
Andrei Zeliankou
4d25c61224 Edited changes.xml for the 1.32.0 release 2024-02-27 12:24:44 +00:00
Dylan Arbour
d5665f49a4 Update setup-go to v5
Removes deprecation notices on actions builds. v5 updates the version of
node and `cache: false` disables the errors related to not finding a
go.sum
2024-02-24 11:12:31 -05:00
Dylan Arbour
9d02b906a5 Add PHP 8.2 and 8.1 to test matrix
`setup-php` action was fixed to add embed SAPI for older versions of PHP
2024-02-23 18:06:33 -05:00
Konstantin Pavlov
faa7e79242 Packages: Pass CFLAGS to compile wasm modules on all packaging targets
This extends the approach used for debian-based packages in 3f805bc64e
to rpm as well.  Notable change for both deb and rpm packaging is to use
CFLAGS as defined in the build/Makefile, and not pass them from the
environment which might not be there (as is the case for rpm).

While at it, stop passing CFLAGS in the install phase, as it should no
longer invoke builds (see d54af163c4).

The rpm part was overlooked in 7a6405566c, since testing was not done
on the platforms where problem manifested itself, notably Amazon Linux
2023 and Fedora 38+.
2024-02-22 18:46:15 -08:00
Dylan Arbour
e2cab03234 Remove debug from builds and tests
The info and above errors should be more than enough for debugging
failures in GitHuB Actions CI.
2024-02-22 15:43:46 -05:00
Sergey A. Osokin
2f3c7c2c07 Update third-party java components to their recent versions
Acked-by: Timo Stark <t.stark@nginx.com>
[ Remove trailing '.' from subject line - Andrew ]
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-22 03:56:20 +00:00
Andrew Clayton
d54af163c4 Wasm-wc: Use the cargo build output as the make target dependency
cargo build creates the language module under
src/wasm-wasi-component/target/release/libwasm_wasi_component.so and not
build/lib/unit/modules/wasm_wasi_component.unit.so which is what we were
using as a target dependency in the Makefile which doesn't exist so this
resulted in the following

  $ make wasm-wasi-component-install
  cargo build --release --manifest-path src/wasm-wasi-component/Cargo.toml
      Finished release [optimized] target(s) in 0.17s
  install -d /opt/unit/modules
  install -p src/wasm-wasi-component/target/release/libwasm_wasi_component.so \
          /opt/unit/modules/wasm_wasi_component.unit.so

I.e it wanted to rebuild the module, after this patch we get the more
correct

  $ make wasm-wasi-component-install
  install -d /opt/unit/modules
  install -p src/wasm-wasi-component/target/release/libwasm_wasi_component.so \
          /opt/unit/modules/wasm_wasi_component.unit.so

This is all a little ugly because we're fighting against cargo wanting
to do its own thing and this wasm-wasi-component language module build
process is likely going to get some re-working anyway, so this will do
for now.

Reported-by: Konstantin Pavlov <thresh@nginx.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-22 03:17:08 +00:00
Andrew Clayton
7b13c30604 Wasm-wc: Add nxt_unit.o as a dependency in the auto script
Rather than calling make itself to build nxt_unit.o make nxt_unit.o a
dependency of the main module build target.

Reported-by: Konstantin Pavlov <thresh@nginx.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-22 03:17:08 +00:00
Konstantin Pavlov
7a6405566c Packages: added wasm-wasi-component module packaging for rpm-based distros 2024-02-21 17:45:54 -08:00
Konstantin Pavlov
3f805bc64e Packages: added wasm-wasi-component module packaging for deb-based distros
We need to redefine CFLAGS to drop missing-prototypes as warning since
third-party code such as wasmtime fails to build from source when
building a debian package.  This happens only for packages because we
use DPKG_EXPORT_BUILDFLAGS=1 propagating build flags to the environment,
so cargo build picks it up as well.  Since we have no control over
third-party code, the easiest solution is to disable this warning.
2024-02-21 17:45:54 -08:00
Andrei Zeliankou
cabea47de7 Tests: renamed test_python_procman.py since it's not Python-specific
Python applications are used only to generate responses here and can be
replaced by applications written in any other language.  While the
"_python" prefix is used to indicate that the file contains tests
specific to the Python module.
2024-02-21 17:40:25 +00:00
Andrei Zeliankou
dbd9d25f17 Tests: skip some of TLS reconfiguration tests under AddressSanitizer
These tests cause router crash when run with AddressSanitizer:

=================================================================
==77196==ERROR: AddressSanitizer: heap-use-after-free on address 0x60c000079340 at pc 0x55d56b132d4b bp 0x7f8cc7f346b0 sp 0x7f8cc7f346a0
READ of size 1 at 0x60c000079340 thread T1
    #0 0x55d56b132d4a in nxt_openssl_conn_io_shutdown src/nxt_openssl.c:1466
    #1 0x55d56b0f6a25 in nxt_h1p_closing src/nxt_h1proto.c:2069
    #2 0x55d56b1009a6 in nxt_h1p_shutdown src/nxt_h1proto.c:2038
    #3 0x55d56b1014c3 in nxt_h1p_request_close src/nxt_h1proto.c:1718
    #4 0x55d56b1045c0 in nxt_http_request_close_handler src/nxt_http_request.c:864
    #5 0x55d56b104988 in nxt_http_request_done src/nxt_http_request.c:795
    #6 0x55d56b0ba0c3 in nxt_event_engine_start src/nxt_event_engine.c:542
    #7 0x55d56b0dcac2 in nxt_router_thread_start src/nxt_router.c:3645
    #8 0x55d56b0b421b in nxt_thread_trampoline src/nxt_thread.c:126
    #9 0x7f8ccab95ac2  (/lib/x86_64-linux-gnu/libc.so.6+0x94ac2)
    #10 0x7f8ccac2784f  (/lib/x86_64-linux-gnu/libc.so.6+0x12684f)
2024-02-21 17:40:25 +00:00
Andrei Zeliankou
99da2f3c8e Tests: check for the AddressSanitizer flag during discovery
This flag is necessary to either run or skip certain tests that have
specific behavior depending on whether AddressSanitizer is enabled.

For instance, some tests may fail only when the binary is compiled
with AddressSanitizer.
2024-02-21 17:40:25 +00:00
Andrei Zeliankou
7883acc62d Tests: Ruby hook tests unstable for version older 3.0
It can fail with reporting following alert:

[alert] 137462#137462 mount("none", "/tmp/unit-test-636e0uh8/proc", "proc", 2097162, "") (16: Device or resource busy)
2024-02-21 17:40:25 +00:00
Andrew Clayton
4c558697bb Docker: Re-generate Dockerfile.wasm
This now includes support for the 'wasm-wasi-component' module.

This targets the upcoming 1.32.0 release which is required by
wasm-wasi-component. However of course the 1.32.0 tag doesn't exist yet,
so there will be a small window where this image won't build.

Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
1297f6f0f4 Docker: Add wasm-wasi-component to the wasm target
Thus

  $ make build-wasm

will build _both_ the 'wasm' & 'wasm-wasi-component' modules.

Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
7702293dda Docker: Bump rust version to 1.76.0
The minimum version required to build wasmtime 17 which is required by
wasm-wasi-component is 1.73.0

But no point not using the latest version.

This also now needs the libclang-dev package installed, we install this
via MODULE_PREBUILD_wasm.

Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
4e6d7e8768 Wasm-wc: Wire it up to the build system
Et voila...

  $ ./configure wasm-wasi-component
  configuring wasm-wasi-component module
  Looking for rust compiler ... found.
  Looking for cargo ... found.
   + wasm-wasi-component module: wasm_wasi_component.unit.so
  $ make install
  test -d /opt/unit/sbin          || install -d /opt/unit/sbin
  install -p build/sbin/unitd /opt/unit/sbin/
  test -d /opt/unit/state                 || install -d /opt/unit/state
  test -d /opt/unit               || install -d /opt/unit
  test -d /opt/unit               || install -d /opt/unit
  test -d /opt/unit/share/man/man8                || install -d /opt/unit/sh
man/man8
  install -p -m644 build/share/man/man8/unitd.8           /opt/unit/share/ma
n8/
  make build/src/nxt_unit.o
  make[1]: Entering directory '/home/andrew/src/unit'
  make[1]: 'build/src/nxt_unit.o' is up to date.
  make[1]: Leaving directory '/home/andrew/src/unit'
  cargo build --release --manifest-path src/wasm-wasi-component/Cargo.toml
      Finished release [optimized] target(s) in 0.55s
  install -d /opt/unit/modules
  install -p src/wasm-wasi-component/target/release/libwasm_wasi_component.so \
          /opt/unit/modules/wasm_wasi_component.unit.so

Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
da44dc00dc Fix alignment of wasm options text in auto/help
The indentation uses spaces and not TABs.

Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
07a0c9a348 Wasm-wc: Wire up the language module to the config system
This exposes the various WebAssembly Component Model language module
specific options.

The application type is "wasm-wasi-component".

There is a "component" option that is required, this specifies the full
path to the WebAssembly component to be run. This component should be in
binary format, i.e a .wasm file.

There is also currently one optional option

"access"

Due to the sandboxed nature of WebAssembly, by default Wasm
modules/components don't have any access to the underlying filesystem.

There is however a capabilities based mechanism[0] for allowing such
access.

This adds a config option to the 'wasm-wasi-component' application type
(same as for 'wasm');
'access.filesystem' which takes an array of
directory paths that are then made available to the wasm
module/component. This access works recursively, i.e everything under a
specific path is allowed access to.

Example config might look like

  "applications": {
      "my-wasm-component": {
          "type": "wasm-wasi-component",
          "component": "/path/to/component.wasm",
          "access" {
              "filesystem": [
                  "/tmp",
                  "/var/tmp"
              ]
          }
      }
  }

The actual mechanism used allows directories to be mapped differently in
the guest. But at the moment we don't support that and just map say /tmp
to /tmp. This can be revisited if it's something users clamour for.

[0]: <https://github.com/bytecodealliance/wasmtime/blob/main/docs/WASI-capabilities.md>

Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
8d030139a1 Wasm-wc: Add Cargo.lock
It seems we do want to track this thing. This is just the latest version
that cargo had generated for me.

Cc: Dan Callahan <d.callahan@f5.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
60eb6c43a7 Wasm-wc: Allow to use the 'reactor' adaptor again
With the initial port to wasmtime 17 we could no longer use the
'reactor' adaptor but had to switch to the more restrictive 'proxy'
adaptor.

This meant amongst other things (probably) we could no longer access the
filesystem.

Thanks to Joel Dice for pointing out the fix.

With this we can go back to using the 'reactor' adaptor again and things
are back to working as before.

It's worth noting that you can use either the 'proxy' or 'reactor'
adaptor depending on your requirements.

Cc: Joel Dice <joel.dice@fermyon.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
98f808af2c Wasm-wc: Upgrade to wasmtime 17
This brings WASI 0.2.0 support.

Link: <https://github.com/bytecodealliance/wasmtime/releases/tag/v17.0.0>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00
Andrew Clayton
ac3a54d671 Wasm-wc: Improve request buffer handling
When Unit receives a request, if the body of that request is greater
than a certain amount (16KiB by default) then it is written to a
temporary file.

When a language module goes to read the request body in such situations
it will end up using read(2).

The wasm-wasi-component language module was failing to properly read
request bodies of around 2GiB or more.

This is because (on Linux at least) read(2) (and other related system
calls) will only read (or write) at most 0x7ffff000 (2,147,479,552)
bytes, this is the case for both 32 and 64-bit systems.

Regardless, it's probably not a good idea doing IO in such large chunks
anyway.

This patch changes the wasm-wasi-component language module to read the
request buffer in 32MiB chunks (this matches the original 'wasm'
language module).

We are still limited to a 4GiB address space and can only upload files a
little under 4GiB.

Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-21 16:20:32 +00:00