Bump versions for v9.42

This commit is contained in:
github-actions[bot] committed 2026-06-13 14:38:34 +00:00
1 parent cb43837c32
commit 967b8482d3
9 files changed
+99 -16

No files matched your search

+1 -1
View File
@@ -7,7 +7,7 @@ LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
# TARGETARCH and TARGETVARIANT are automatically provided by Docker Buildx # TARGETARCH and TARGETVARIANT are automatically provided by Docker Buildx
ARG TARGETARCH ARG TARGETARCH
ARG TARGETVARIANT ARG TARGETVARIANT
ARG VERSION=9.41 ARG VERSION=9.42
ARG DEBIAN_FRONTEND=noninteractive ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils gnupg wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3 unzip" ENV BUILD_DEPS="apt-utils gnupg wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3 unzip"
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v9.41.0" appVersion: "v9.42.0"
files: files:
userUploads: userUploads:
- README.md - README.md
+2 -2
View File
@@ -10,7 +10,7 @@ This is without container (without Docker or Snap).
Right click and download files 1-4: Right click and download files 1-4:
1. [wekan-9.41-win64.zip](https://github.com/wekan/wekan/releases/download/v9.41/wekan-9.41-win64.zip) or newest available at https://github.com/wekan/wekan/releases/ 1. [wekan-9.42-win64.zip](https://github.com/wekan/wekan/releases/download/v9.42/wekan-9.42-win64.zip) or newest available at https://github.com/wekan/wekan/releases/
2. [node.exe](https://nodejs.org/dist/latest-v24.x/win-x64/node.exe) 2. [node.exe](https://nodejs.org/dist/latest-v24.x/win-x64/node.exe)
@@ -22,7 +22,7 @@ Right click and download files 1-4:
6. Double click `mongodb-windows-x86_64-7.0.34-signed.msi` . In installer, uncheck downloading MongoDB compass. 6. Double click `mongodb-windows-x86_64-7.0.34-signed.msi` . In installer, uncheck downloading MongoDB compass.
7. Unzip `wekan-9.41-win64.zip` , inside it is directory `bundle`, to it copy other files: 7. Unzip `wekan-9.42-win64.zip` , inside it is directory `bundle`, to it copy other files:
``` ```
bundle (directory) bundle (directory)
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "wekan", "name": "wekan",
"version": "v9.41.0", "version": "v9.42.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "wekan", "name": "wekan",
"version": "v9.41.0", "version": "v9.42.0",
"description": "Open-Source kanban", "description": "Open-Source kanban",
"private": true, "private": true,
"repository": { "repository": {
+3 -3
View File
@@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf8" /> <meta charset="utf8" />
<title>WeKan REST API v9.41</title> <title>WeKan REST API v9.42</title>
<!-- needed for adaptive design --> <!-- needed for adaptive design -->
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<style> <style>
@@ -423,7 +423,7 @@ data-styled.g139[id="sc-iIvZUO"]{content:"kAmnlO,"}/*!sc*/
55.627 l 55.6165,55.627 -231.245496,231.24803 c -127.185,127.1864 55.627 l 55.6165,55.627 -231.245496,231.24803 c -127.185,127.1864
-231.5279,231.248 -231.873,231.248 -0.3451,0 -104.688, -231.5279,231.248 -231.873,231.248 -0.3451,0 -104.688,
-104.0616 -231.873,-231.248 z -104.0616 -231.873,-231.248 z
" fill="currentColor"></path></g></svg></div></div><div class="sc-jtyQFi ldXCvc api-content"><div class="sc-eCQgVK jleRXN"><div class="sc-iCECmn lhRBUS"><div class="sc-hKVpXn kktglN api-info"><h1 class="sc-fuztkK sc-ctiVdb eRMVDe cBgvIi">Wekan REST API<!-- --> <span>(<!-- -->v9.41<!-- -->)</span></h1><p>Download OpenAPI specification<!-- -->:</p><div class="sc-iJSMbW sc-cBEgGa fiNpIH ewCFMV"></div><div data-role="redoc-summary" html="" class="sc-iJSMbW sc-cBEgGa fiNpIH ewCFMV"></div><div data-role="redoc-description" html="&lt;p&gt;The REST API allows you to control and extend Wekan with ease.&lt;/p&gt; " fill="currentColor"></path></g></svg></div></div><div class="sc-jtyQFi ldXCvc api-content"><div class="sc-eCQgVK jleRXN"><div class="sc-iCECmn lhRBUS"><div class="sc-hKVpXn kktglN api-info"><h1 class="sc-fuztkK sc-ctiVdb eRMVDe cBgvIi">Wekan REST API<!-- --> <span>(<!-- -->v9.42<!-- -->)</span></h1><p>Download OpenAPI specification<!-- -->:</p><div class="sc-iJSMbW sc-cBEgGa fiNpIH ewCFMV"></div><div data-role="redoc-summary" html="" class="sc-iJSMbW sc-cBEgGa fiNpIH ewCFMV"></div><div data-role="redoc-description" html="&lt;p&gt;The REST API allows you to control and extend Wekan with ease.&lt;/p&gt;
&lt;p&gt;If you are an end-user and not a dev or a tester, &lt;a href=&quot;https://github.com/wekan/wekan/issues/new&quot;&gt;create an issue&lt;/a&gt; to request new APIs.&lt;/p&gt; &lt;p&gt;If you are an end-user and not a dev or a tester, &lt;a href=&quot;https://github.com/wekan/wekan/issues/new&quot;&gt;create an issue&lt;/a&gt; to request new APIs.&lt;/p&gt;
&lt;blockquote&gt; &lt;blockquote&gt;
&lt;p&gt;All API calls in the documentation are made using &lt;code&gt;curl&lt;/code&gt;. However, you are free to use Java / Python / PHP / Golang / Ruby / Swift / Objective-C / Rust / Scala / C# or any other programming languages.&lt;/p&gt; &lt;p&gt;All API calls in the documentation are made using &lt;code&gt;curl&lt;/code&gt;. However, you are free to use Java / Python / PHP / Golang / Ruby / Swift / Objective-C / Rust / Scala / C# or any other programming languages.&lt;/p&gt;
@@ -1337,7 +1337,7 @@ comment-only / worker members are rejected).</p>
" class="sc-iJSMbW sc-cBEgGa sc-ciCrSJ fiNpIH dNfUH dDDioG"><p>Attachment not found</p> " class="sc-iJSMbW sc-cBEgGa sc-ciCrSJ fiNpIH dNfUH dDDioG"><p>Attachment not found</p>
</div></button></div></div></div><div class="sc-jSppWd sc-gKkgUA fpMlmc bdQQyo"><div class="sc-fXwuWv fYxpnv"><button class="sc-jWMFtl jzaJhV"><span type="delete" class="sc-eEFuoE iINwyG http-verb delete">delete</span><span class="sc-FpjRO dsIRaZ">/api/attachment/delete/{attachmentId}</span><svg class="sc-dYjPD bQKUih" style="margin-right:-25px" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button><div aria-hidden="true" class="sc-fmtEmb tUxhh"><div class="sc-ljIcGq bAnPPh"><div html="" class="sc-iJSMbW sc-cBEgGa fiNpIH bAoMjv"></div><div tabindex="0" role="button"><div class="sc-jlJOIR PEJyb"><span></span>/api/attachment/delete/{attachmentId}</div></div></div></div></div></div></div></div></div><div class="sc-ekVkVN bjzTxL"></div></div></div> </div></button></div></div></div><div class="sc-jSppWd sc-gKkgUA fpMlmc bdQQyo"><div class="sc-fXwuWv fYxpnv"><button class="sc-jWMFtl jzaJhV"><span type="delete" class="sc-eEFuoE iINwyG http-verb delete">delete</span><span class="sc-FpjRO dsIRaZ">/api/attachment/delete/{attachmentId}</span><svg class="sc-dYjPD bQKUih" style="margin-right:-25px" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button><div aria-hidden="true" class="sc-fmtEmb tUxhh"><div class="sc-ljIcGq bAnPPh"><div html="" class="sc-iJSMbW sc-cBEgGa fiNpIH bAoMjv"></div><div tabindex="0" role="button"><div class="sc-jlJOIR PEJyb"><span></span>/api/attachment/delete/{attachmentId}</div></div></div></div></div></div></div></div></div><div class="sc-ekVkVN bjzTxL"></div></div></div>
<script> <script>
const __redoc_state = {"menu":{"activeItemIdx":-1},"spec":{"data":{"openapi":"3.0.0","info":{"title":"Wekan REST API","version":"v9.41","description":"The REST API allows you to control and extend Wekan with ease.\n\nIf you are an end-user and not a dev or a tester, [create an issue](https://github.com/wekan/wekan/issues/new) to request new APIs.\n\n> All API calls in the documentation are made using `curl`. However, you are free to use Java / Python / PHP / Golang / Ruby / Swift / Objective-C / Rust / Scala / C# or any other programming languages.\n\n# Production Security Concerns\nWhen calling a production Wekan server, ensure it is running via HTTPS and has a valid SSL Certificate. The login method requires you to post your username and password in plaintext, which is why we highly suggest only calling the REST login api over HTTPS. Also, few things to note:\n\n* Only call via HTTPS\n* Implement a timed authorization token expiration strategy\n* Ensure the calling user only has permissions for what they are calling and no more\n"},"paths":{"/users/login":{"post":{"operationId":"login","summary":"Login with REST API","tags":["Login"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["username","password"],"properties":{"username":{"description":"Your username\n","type":"string"},"password":{"description":"Your password\n","type":"string","format":"password"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["username","password"],"properties":{"username":{"description":"Your username\n","type":"string"},"password":{"description":"Your password\n","type":"string","format":"password"}}}}},"description":"Login credentials","required":true},"responses":{"200":{"description":"Successful authentication","content":{"*/*":{"schema":{"type":"object","required":["id","token","tokenExpires"],"properties":{"id":{"type":"string","description":"User ID"},"token":{"type":"string","description":"Authentication token\n"},"tokenExpires":{"type":"string","format":"date-time","description":"Token expiration date\n"}}}}}},"400":{"description":"Error in authentication\n","content":{"*/*":{"schema":{"type":"object","properties":{"error":{"type":"string"},"reason":{"type":"string"}}}}}},"default":{"description":"Error in authentication\n"}}}},"/users/register":{"post":{"operationId":"register","summary":"Register with REST API","description":"Notes:\n - You will need to provide the token for any of the authenticated methods.\n","tags":["Login"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"username":{"description":"Your username\n","type":"string"},"password":{"description":"Your password\n","type":"string","format":"password"},"email":{"description":"Your email\n","type":"string"}},"required":["username","password","email"]}}},"required":true},"responses":{"200":{"description":"Successful registration","content":{"*/*":{"schema":{"items":{"properties":{"id":{"type":"string"},"token":{"type":"string"},"tokenExpires":{"type":"string"}}}}}}},"400":{"description":"Error in registration\n","content":{"*/*":{"schema":{"items":{"properties":{"error":{"type":"number"},"reason":{"type":"string"}}}}}}},"default":{"description":"Error in registration\n"}}}},"/api/boards":{"get":{"operationId":"get_boards","tags":["Boards"],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}},"post":{"operationId":"post_boards","tags":["Boards"],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}}},"/api/boards/{board}":{"get":{"operationId":"get_board","tags":["Boards"],"parameters":[{"name":"board","in":"path","description":"the board value","required":true,"schema":{"type":"string"}}],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}},"delete":{"operationId":"delete_board","tags":["Boards"],"parameters":[{"name":"board","in":"path","description":"the board value","required":true,"schema":{"type":"string"}}],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}}},"/api/boards/{board}/attachments":{"get":{"operationId":"get_board_attachments","tags":["Boards"],"parameters":[{"name":"board","in":"path","description":"the board value","required":true,"schema":{"type":"string"}}],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}}},"/api/boards/{board}/attachments/{attachment}/export":{"get":{"operationId":"exportJson","summary":"This route is used to export a attachement to a json file format.","description":"If user is already logged-in, pass loginToken as param\n \"authToken\": '/api/boards/:boardId/attachments/:attachmentId/export?authToken=:token'\n","tags":["Boards"],"parameters":[{"name":"board","in":"path","description":"the ID of the board we are exporting\n","required":true,"schema":{"type":"string"}},{"name":"attachment","in":"path","description":"the ID of the aLine truncated const __redoc_state = {"menu":{"activeItemIdx":-1},"spec":{"data":{"openapi":"3.0.0","info":{"title":"Wekan REST API","version":"v9.42","description":"The REST API allows you to control and extend Wekan with ease.\n\nIf you are an end-user and not a dev or a tester, [create an issue](https://github.com/wekan/wekan/issues/new) to request new APIs.\n\n> All API calls in the documentation are made using `curl`. However, you are free to use Java / Python / PHP / Golang / Ruby / Swift / Objective-C / Rust / Scala / C# or any other programming languages.\n\n# Production Security Concerns\nWhen calling a production Wekan server, ensure it is running via HTTPS and has a valid SSL Certificate. The login method requires you to post your username and password in plaintext, which is why we highly suggest only calling the REST login api over HTTPS. Also, few things to note:\n\n* Only call via HTTPS\n* Implement a timed authorization token expiration strategy\n* Ensure the calling user only has permissions for what they are calling and no more\n"},"paths":{"/users/login":{"post":{"operationId":"login","summary":"Login with REST API","tags":["Login"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["username","password"],"properties":{"username":{"description":"Your username\n","type":"string"},"password":{"description":"Your password\n","type":"string","format":"password"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["username","password"],"properties":{"username":{"description":"Your username\n","type":"string"},"password":{"description":"Your password\n","type":"string","format":"password"}}}}},"description":"Login credentials","required":true},"responses":{"200":{"description":"Successful authentication","content":{"*/*":{"schema":{"type":"object","required":["id","token","tokenExpires"],"properties":{"id":{"type":"string","description":"User ID"},"token":{"type":"string","description":"Authentication token\n"},"tokenExpires":{"type":"string","format":"date-time","description":"Token expiration date\n"}}}}}},"400":{"description":"Error in authentication\n","content":{"*/*":{"schema":{"type":"object","properties":{"error":{"type":"string"},"reason":{"type":"string"}}}}}},"default":{"description":"Error in authentication\n"}}}},"/users/register":{"post":{"operationId":"register","summary":"Register with REST API","description":"Notes:\n - You will need to provide the token for any of the authenticated methods.\n","tags":["Login"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"username":{"description":"Your username\n","type":"string"},"password":{"description":"Your password\n","type":"string","format":"password"},"email":{"description":"Your email\n","type":"string"}},"required":["username","password","email"]}}},"required":true},"responses":{"200":{"description":"Successful registration","content":{"*/*":{"schema":{"items":{"properties":{"id":{"type":"string"},"token":{"type":"string"},"tokenExpires":{"type":"string"}}}}}}},"400":{"description":"Error in registration\n","content":{"*/*":{"schema":{"items":{"properties":{"error":{"type":"number"},"reason":{"type":"string"}}}}}}},"default":{"description":"Error in registration\n"}}}},"/api/boards":{"get":{"operationId":"get_boards","tags":["Boards"],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}},"post":{"operationId":"post_boards","tags":["Boards"],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}}},"/api/boards/{board}":{"get":{"operationId":"get_board","tags":["Boards"],"parameters":[{"name":"board","in":"path","description":"the board value","required":true,"schema":{"type":"string"}}],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}},"delete":{"operationId":"delete_board","tags":["Boards"],"parameters":[{"name":"board","in":"path","description":"the board value","required":true,"schema":{"type":"string"}}],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}}},"/api/boards/{board}/attachments":{"get":{"operationId":"get_board_attachments","tags":["Boards"],"parameters":[{"name":"board","in":"path","description":"the board value","required":true,"schema":{"type":"string"}}],"security":[{"UserSecurity":[]}],"responses":{"200":{"description":"200 response"}}}},"/api/boards/{board}/attachments/{attachment}/export":{"get":{"operationId":"exportJson","summary":"This route is used to export a attachement to a json file format.","description":"If user is already logged-in, pass loginToken as param\n \"authToken\": '/api/boards/:boardId/attachments/:attachmentId/export?authToken=:token'\n","tags":["Boards"],"parameters":[{"name":"board","in":"path","description":"the ID of the board we are exporting\n","required":true,"schema":{"type":"string"}},{"name":"attachment","in":"path","description":"the ID of the aLine truncated
var container = document.getElementById('redoc'); var container = document.getElementById('redoc');
Redoc.hydrate(__redoc_state, container); Redoc.hydrate(__redoc_state, container);
+84 -1
View File
@@ -1,7 +1,7 @@
swagger: '2.0' swagger: '2.0'
info: info:
title: Wekan REST API title: Wekan REST API
version: v9.41 version: v9.42
description: | description: |
The REST API allows you to control and extend Wekan with ease. The REST API allows you to control and extend Wekan with ease.
@@ -3185,6 +3185,17 @@ definitions:
items: items:
$ref: "#/definitions/BoardsTeams" $ref: "#/definitions/BoardsTeams"
x-nullable: true x-nullable: true
importUsernames:
description: |
Usernames of imported (e.g. Trello) board members that were not mapped
to an existing WeKan user during import. Kept so an admin can map them
to real users later (People panel -> user -> Imported Usernames), after
which future imports of this board auto-map.
type: array
items:
type: string
x-nullable: true
x-nullable: true
color: color:
description: | description: |
The color of the board. The color of the board.
@@ -3195,6 +3206,13 @@ definitions:
The background image URL of the board. The background image URL of the board.
type: string type: string
x-nullable: true x-nullable: true
backgroundImageId:
description: |
The id of the active board background attachment (a board-level
Attachment with meta.source === 'board-background'), when the active
background is an uploaded/imported image rather than an external URL.
type: string
x-nullable: true
allowsCardCounterList: allowsCardCounterList:
description: | description: |
Show card counter per list Show card counter per list
@@ -3621,6 +3639,8 @@ definitions:
- teamId - teamId
- teamDisplayName - teamDisplayName
- isActive - isActive
BoardsImportusernames:
type: object
CardComments: CardComments:
type: object type: object
description: A comment on a card description: A comment on a card
@@ -3776,6 +3796,49 @@ definitions:
Date the card ended Date the card ended
type: string type: string
x-nullable: true x-nullable: true
dueComplete:
description: |
Has the due date been marked complete? Imported from Trello
(card.dueComplete) and toggled by the minicard due checkbox.
type: boolean
x-nullable: true
stickers:
description: |
list of stickers shown on the card (imported from Trello)
type: array
items:
$ref: "#/definitions/CardsStickers"
x-nullable: true
locationName:
description: |
human readable location name of the card (imported from Trello)
type: string
x-nullable: true
locationAddress:
description: |
street address of the card location (imported from Trello)
type: string
x-nullable: true
locationLatitude:
description: |
latitude of the card location (imported from Trello)
type: number
x-nullable: true
locationLongitude:
description: |
longitude of the card location (imported from Trello)
type: number
x-nullable: true
locations:
description: |
list of locations attached to the card. Supports multiple locations,
each with an optional name, address and coordinates. A legacy single
location stored in the locationName/Address/Latitude/Longitude fields
is surfaced through getLocations() for backwards compatibility.
type: array
items:
$ref: "#/definitions/CardsLocations"
x-nullable: true
spentTime: spentTime:
description: | description: |
How much time has been spent on this How much time has been spent on this
@@ -3995,6 +4058,10 @@ definitions:
type: object type: object
CardsAssignees: CardsAssignees:
type: object type: object
CardsStickers:
type: object
CardsLocations:
type: object
CardsVotePositive: CardsVotePositive:
type: object type: object
CardsVoteNegative: CardsVoteNegative:
@@ -4500,6 +4567,12 @@ definitions:
description: | description: |
has user at card Custom Fields have Grid (false) or one per row (true) layout? has user at card Custom Fields have Grid (false) or one per row (true) layout?
type: boolean type: boolean
trelloApiSaved:
description: |
Has the user saved Trello API credentials (key + token) for importing?
The credentials themselves are stored server-side only (never published
to the client); this is just the published "saved" indicator.
type: boolean
hiddenMinicardLabelText: hiddenMinicardLabelText:
description: | description: |
does the user want to hide minicard label texts? does the user want to hide minicard label texts?
@@ -4529,6 +4602,16 @@ definitions:
description: | description: |
language of the user language of the user
type: string type: string
mapProvider:
description: |
which map service the card "Open in map" links use
('openstreetmap' (default), 'google', 'bing' or 'apple').
type: string
enum:
- openstreetmap
- google
- bing
- apple
moveAndCopyDialog: moveAndCopyDialog:
description: | description: |
move and copy card dialog move and copy card dialog
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"), appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user. # The name of the app as it is displayed to the user.
appVersion = 941, appVersion = 942,
# Increment this for every release. # Increment this for every release.
appMarketingVersion = (defaultText = "9.41~2026-06-11"), appMarketingVersion = (defaultText = "9.42~2026-06-13"),
# Human-readable presentation of the app version. # Human-readable presentation of the app version.
minUpgradableAppVersion = 0, minUpgradableAppVersion = 0,
+4 -4
View File
@@ -1,5 +1,5 @@
name: wekan name: wekan
version: '9.41' version: '9.42'
base: core26 base: core26
build-base: devel build-base: devel
confinement: strict confinement: strict
@@ -194,14 +194,14 @@ parts:
exit 1 exit 1
;; ;;
esac esac
WEKAN_ZIP="wekan-9.41-${WEKAN_ARCH}.zip" WEKAN_ZIP="wekan-9.42-${WEKAN_ARCH}.zip"
NODE_TAR="node-v24.16.0-linux-${NODE_ARCH}.tar.xz" NODE_TAR="node-v24.16.0-linux-${NODE_ARCH}.tar.xz"
echo "Cleaning environment first" echo "Cleaning environment first"
rm -rf .build rm -rf .build
mkdir .build mkdir .build
cd .build cd .build
#wget https://github.com/wekan/wekan/releases/download/v9.41/wekan-9.41-amd64.zip #wget https://github.com/wekan/wekan/releases/download/v9.42/wekan-9.42-amd64.zip
wget "https://github.com/wekan/wekan/releases/download/v9.41/${WEKAN_ZIP}" wget "https://github.com/wekan/wekan/releases/download/v9.42/${WEKAN_ZIP}"
unzip "${WEKAN_ZIP}" unzip "${WEKAN_ZIP}"
rm "${WEKAN_ZIP}" rm "${WEKAN_ZIP}"
# Fix: bcrypt 5.0.1 (Meteor accounts-password) ships node-addon-api@3 # Fix: bcrypt 5.0.1 (Meteor accounts-password) ships node-addon-api@3