Compare commits

...
25 Commits
Author SHA1 Message Date
Lauri Ojansivu a1a6dae5c6 v7.41 2024-03-18 02:32:43 +02:00
Lauri Ojansivu c5f40f1be9 Updated ChangeLog. 2024-03-18 02:26:26 +02:00
Lauri Ojansivu 4358cb5e57 Merge pull request #5350 from lorodoes/main
Update mongodb-control
2024-03-18 01:46:46 +02:00
lorodoes a591bf05e0 Update mongodb-control
Missed a few mongosh lines.
2024-03-17 19:28:50 -04:00
Lauri Ojansivu 568b7538ad Merge pull request #5349 from lorodoes/main
Update mongodb-control
2024-03-18 01:06:54 +02:00
lorodoes bbd7765432 Update mongodb-control
Fixes for mongosh to allow snap packages to update to the edge/candidate version
2024-03-17 19:04:07 -04:00
Lauri Ojansivu 558024785f v7.40 2024-03-17 04:03:51 +02:00
Lauri Ojansivu 76043cc5b6 Updated ChangeLog. 2024-03-17 03:53:50 +02:00
Lauri Ojansivu 583fca1814 Fixed In RTL, hamburger margin is too much in mobile.
Thanks to mohammadZahedian and xet7 !

Fixes #5337
2024-03-17 03:49:46 +02:00
Lauri Ojansivu 806201b8cb Updated ChangeLog. 2024-03-17 03:38:26 +02:00
Lauri Ojansivu 24c89aeb64 Fixed centering of text below custom login logo.
Thanks to xet7 !
2024-03-17 03:36:05 +02:00
Lauri Ojansivu 8f0d88d9e0 v7.39 2024-03-16 15:08:24 +02:00
Lauri Ojansivu e92d8dc127 Updated ChangeLog. 2024-03-16 14:59:15 +02:00
Lauri Ojansivu 8a99e8f796 Merge pull request #5346 from kuba-orlik/patch-1
Make the contents of the cards grow to the list width
2024-03-14 20:38:18 +02:00
Kuba Orlik c0246c6834 Make the contents of the cards grow to the list width 2024-03-14 11:42:56 +01:00
Lauri Ojansivu 42ed92f346 Merge pull request #5344 from wekan/dependabot/github_actions/VeryGoodOpenSource/very_good_coverage-3.0.0
Bump VeryGoodOpenSource/very_good_coverage from 2.2.0 to 3.0.0
2024-03-13 16:06:19 +02:00
Lauri Ojansivu df0bd90fae Merge pull request #5343 from wekan/dependabot/github_actions/docker/build-push-action-5.2.0
Bump docker/build-push-action from 5.1.0 to 5.2.0
2024-03-13 16:05:57 +02:00
dependabot[bot] 3453f94b43 Bump VeryGoodOpenSource/very_good_coverage from 2.2.0 to 3.0.0
Bumps [VeryGoodOpenSource/very_good_coverage](https://github.com/verygoodopensource/very_good_coverage) from 2.2.0 to 3.0.0.
- [Release notes](https://github.com/verygoodopensource/very_good_coverage/releases)
- [Changelog](https://github.com/VeryGoodOpenSource/very_good_coverage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/verygoodopensource/very_good_coverage/compare/v2.2.0...v3.0.0)

---
updated-dependencies:
- dependency-name: VeryGoodOpenSource/very_good_coverage
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 20:01:56 +00:00
dependabot[bot] ca537e266d Bump docker/build-push-action from 5.1.0 to 5.2.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/4a13e500e55cf31b7a5d59a38ab2040ab0f42f56...af5a7ed5ba88268d5278f7203fb52cd833f66d6e)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 20:01:53 +00:00
Lauri Ojansivu 8f3c948614 Updated docs. 2024-03-11 15:53:23 +02:00
Lauri Ojansivu 059743ad34 Merge pull request #5341 from e-gaulue/e-gaulue-wiki-1
Clarify usage of api.py
2024-03-11 15:29:04 +02:00
e-gaulue 33ccf68e17 Update New-card-with-Python3-and-REST-API.md 2024-03-11 14:17:20 +01:00
e-gaulue b6f22712f9 Update New-card-with-Python3-and-REST-API.md
Clarify usage, at least for me.
2024-03-11 14:14:42 +01:00
Lauri Ojansivu 9e413b3961 Merge pull request #5340 from e-gaulue/ED1 2024-03-11 11:49:55 +02:00
Lauri Ojansivu 5dd318a481 v7.38 2024-03-10 23:47:29 +01:00
16 changed files with 462 additions and 80 deletions

No files matched your search

+1 -1
View File
@@ -55,7 +55,7 @@ jobs:
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56
uses: docker/build-push-action@af5a7ed5ba88268d5278f7203fb52cd833f66d6e
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
+1 -1
View File
@@ -157,7 +157,7 @@ jobs:
- name: Coverage Report
uses: VeryGoodOpenSource/very_good_coverage@v2.2.0
uses: VeryGoodOpenSource/very_good_coverage@v3.0.0
with:
path: ".coverage/lcov.info"
min_coverage: 1 # TODO add tests and increase to 95!
+41
View File
@@ -15,6 +15,47 @@ Fixing other platforms In Progress.
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
# v7.41 2024-03-18 WeKan ® release
This release fixes the following bugs:
- Fixes for mongosh to allow snap packages to update to the edge/candidate version.
[Part 1](https://github.com/wekan/wekan/pull/5349),
[Part 2](https://github.com/wekan/wekan/pull/5350).
Thanks to lorodoes.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.40 2024-03-17 WeKan ® release
This release fixes the following bugs:
- [Fixed centering of text below custom login logo](https://github.com/wekan/wekan/commit/24c89aeb64cf6266d95f42124419d4f070864631).
Thanks to xet7.
- [Fixed In RTL, hamburger margin is too much in mobile](https://github.com/wekan/wekan/commit/583fca1814d916490b04947ba8d97dd85168fb22).
Thanks to mohammadZahedian and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.39 2024-03-16 WeKan ® release
This release adds the following updates:
- Clarify usage of api.py.
[Part 1](https://github.com/wekan/wekan/pull/5341).
[Part 2](https://github.com/wekan/wekan/commit/8f3c948614df0641b0971d1882cc241587d9d3b4).
Thanks to e-gaulue and xet7.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5343),
[Part 2](https://github.com/wekan/wekan/pull/5344).
and fixes the following bugs:
- [Make the contents of the cards grow to the list width](https://github.com/wekan/wekan/pull/5346).
Thanks to kuba-orlik.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.38 2024-03-10 WeKan ® release
This release adds the following new features:
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v7.38.0"
appVersion: "v7.41.0"
files:
userUploads:
- README.md
+26 -1
View File
@@ -44,6 +44,7 @@ If *nix: chmod +x api.py => ./api.py users
python3 api.py addlabel BOARDID LISTID CARDID LABELID # Add label to a card
python3 api.py addcardwithlabel AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION LABELIDS # Add a card and a label
python3 api.py editboardtitle BOARDID NEWBOARDTITLE # Edit board title
python3 api.py copyboard BOARDID NEWBOARDTITLE # Copy a board
python3 api.py createlabel BOARDID LABELCOLOR LABELNAME (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Create a new label
python3 api.py editcardcolor BOARDID LISTID CARDID COLOR (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Edit card color
python3 api.py addchecklist BOARDID CARDID TITLE ITEM1 ITEM2 ITEM3 ITEM4 (You can add multiple items or just one, or also without any item, just TITLE works as well. * If items or Title contains spaces, you should add ' between them.) # Add checklist + item on a card
@@ -481,7 +482,31 @@ if arguments == 3:
print(body.text)
# ------- EDIT BOARD TITLE END -----------
if sys.argv[1] == 'copyboard':
# ------- COPY BOARD START -----------
boardid = sys.argv[2]
boardtitle = sys.argv[3]
edboardcopy = wekanurl + apiboards + boardid + s + 'copy'
print(edboardcopy)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'title': boardtitle}
body = requests.post(edboardcopy, json=post_data, headers=headers)
print("=== COPY BOARD ===\n")
#body = requests.get(edboardcopy, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
if body.status_code == 200:
print("Succesfull!")
else:
print(f"Error: {body.status_code}")
print(body.text)
# ------- COPY BOARD END -----------
if sys.argv[1] == 'createlist':
# ------- CREATE LIST START -----------
+2 -3
View File
@@ -56,12 +56,12 @@
float: right;
font-size: 18px;
padding-right: 30px;
padding-left: 10px;
padding-left: 5px;
}
.minicard-details-menu {
float: right;
font-size: 18px;
padding-left: 10px;
padding-left: 5px;
}
@media print {
.minicard-details-menu,
@@ -175,7 +175,6 @@
.minicard .minicard-title .viewer {
display: block;
word-wrap: break-word;
max-width: 230px;
}
}
.minicard .dates {
+1
View File
@@ -470,6 +470,7 @@ a:not(.disabled).is-active i.fa {
.select-authentication {
width: 100%;
}
.textBelowCustomLoginLogo,
.auth-layout {
display: flex;
flex-direction: column;
@@ -1,4 +1,7 @@
Also see:
Wekan provides a python script to ease the call of the REST API from command line interface.
# Context
- [API Login to get Bearer token](REST-API#example-call---as-form-data)
- [API docs and examples for various programming languages](https://wekan.github.io/api/), there is Boards / Export for exporting board with API
- In the right menu, scroll down REST API Docs etc links =====>
@@ -6,6 +9,8 @@ Also see:
# Install
You need python3.
Windows
```
choco install python3
@@ -22,13 +27,15 @@ chmod +x wekan.py
./wekan.py
```
# api.py creating new card with Python3 and REST API
# Usage
Below code works now, fixed at 2020-10-29.
Copy the api.py script to you machine. [Newest Wekan Python CLI api.py here](https://raw.githubusercontent.com/wekan/wekan/master/api.py).
Change these:
Then, in this script, look for and change:
- wekanurl: https://boards.example.com => Your Wekan URL
- username (could be username or username@example.com)
- Only works with password login admin user. Does not work with LDAP, OAuth2 etc.
[Newest Wekan Python CLI api.py here](https://raw.githubusercontent.com/wekan/wekan/master/api.py)
Keep in mind your Wekan credentials are potentially accessible in this file.
Then call it without any argument to see if everything is all right. You should just get usage examples.
+31
View File
@@ -2239,6 +2239,37 @@ if (Meteor.isServer) {
}
});
/**
* @operation copy_board
* @summary Copy a board to a new one
*
* @description If your are board admin or wekan admin, this copies the
* given board to a new one.
*
* @param {string} boardId the board
* @param {string} title the title of the new board (default to old one)
*
* @return_type string
*/
JsonRoutes.add('POST', '/api/boards/:boardId/copy', function(req, res) {
const id = req.params.boardId;
const board = ReactiveCache.getBoard(id);
const adminAccess = board.members.some(e => e.userId === req.userId && e.isAdmin);
Authentication.checkAdminOrCondition(req.userId, adminAccess);
try {
board['title'] = req.body.title || Boards.uniqueTitle(board.title);
ret = board.copy();
JsonRoutes.sendResult(res, {
code: 200,
data: ret,
});
} catch (error) {
JsonRoutes.sendResult(res, {
data: error,
});
}
});
/**
* @operation set_board_member_permission
* @tag Users
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v7.38.0",
"version": "v7.41.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v7.38.0",
"version": "v7.41.0",
"description": "Open-Source kanban",
"private": true,
"repository": {
+287 -47
View File
@@ -7,7 +7,7 @@
<meta charset="utf-8">
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>Wekan REST API v7.38</title>
<title>Wekan REST API v7.41</title>
<style>
</style>
@@ -1548,7 +1548,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<ul class="toc-list-h1">
<li>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v7.38">Wekan REST API v7.38</a>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v7.41">Wekan REST API v7.41</a>
</li>
@@ -1616,6 +1616,11 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
</li>
<li>
<a href="#copy_board" class="toc-h2 toc-link" data-title="">copy_board</a>
</li>
<li>
<a href="#add_board_label" class="toc-h2 toc-link" data-title="">add_board_label</a>
@@ -2062,7 +2067,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<div class="page-wrapper">
<div class="dark-box"></div>
<div class="content">
<h1 id="wekan-rest-api">Wekan REST API v7.38</h1>
<h1 id="wekan-rest-api">Wekan REST API v7.41</h1>
<blockquote>
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
</blockquote>
@@ -4207,6 +4212,241 @@ for detailed explanations</p>
To perform this operation, you must be authenticated by means of one of the following methods:
UserSecurity
</aside>
<h2 id="copy_board">copy_board</h2>
<p><a id="opIdcopy_board"></a></p>
<blockquote>
<p>Code samples</p>
</blockquote>
<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
curl -X POST /api/boards/{board}/copy \
-H <span class="hljs-string">&#x27;Content-Type: multipart/form-data&#x27;</span> \
-H <span class="hljs-string">&#x27;Accept: application/json&#x27;</span> \
-H <span class="hljs-string">&#x27;Authorization: API_KEY&#x27;</span>
</code></pre>
<pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/copy</span> <span class="hljs-meta">HTTP/1.1</span>
<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span>
Accept: application/json
</span></code></pre>
<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">&#x27;{
&quot;title&quot;: &quot;string&quot;
}&#x27;</span>;
<span class="hljs-keyword">const</span> headers = {
<span class="hljs-string">&#x27;Content-Type&#x27;</span>:<span class="hljs-string">&#x27;multipart/form-data&#x27;</span>,
<span class="hljs-string">&#x27;Accept&#x27;</span>:<span class="hljs-string">&#x27;application/json&#x27;</span>,
<span class="hljs-string">&#x27;Authorization&#x27;</span>:<span class="hljs-string">&#x27;API_KEY&#x27;</span>
};
fetch(<span class="hljs-string">&#x27;/api/boards/{board}/copy&#x27;</span>,
{
<span class="hljs-attr">method</span>: <span class="hljs-string">&#x27;POST&#x27;</span>,
<span class="hljs-attr">body</span>: inputBody,
<span class="hljs-attr">headers</span>: headers
})
.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
<span class="hljs-keyword">return</span> res.json();
}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
<span class="hljs-built_in">console</span>.log(body);
});
</code></pre>
<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">&#x27;node-fetch&#x27;</span>);
<span class="hljs-keyword">const</span> inputBody = {
<span class="hljs-string">&quot;title&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>
};
<span class="hljs-keyword">const</span> headers = {
<span class="hljs-string">&#x27;Content-Type&#x27;</span>:<span class="hljs-string">&#x27;multipart/form-data&#x27;</span>,
<span class="hljs-string">&#x27;Accept&#x27;</span>:<span class="hljs-string">&#x27;application/json&#x27;</span>,
<span class="hljs-string">&#x27;Authorization&#x27;</span>:<span class="hljs-string">&#x27;API_KEY&#x27;</span>
};
fetch(<span class="hljs-string">&#x27;/api/boards/{board}/copy&#x27;</span>,
{
<span class="hljs-attr">method</span>: <span class="hljs-string">&#x27;POST&#x27;</span>,
<span class="hljs-attr">body</span>: <span class="hljs-built_in">JSON</span>.stringify(inputBody),
<span class="hljs-attr">headers</span>: headers
})
.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
<span class="hljs-keyword">return</span> res.json();
}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
<span class="hljs-built_in">console</span>.log(body);
});
</code></pre>
<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">&#x27;rest-client&#x27;</span>
<span class="hljs-keyword">require</span> <span class="hljs-string">&#x27;json&#x27;</span>
headers = {
<span class="hljs-string">&#x27;Content-Type&#x27;</span> =&gt; <span class="hljs-string">&#x27;multipart/form-data&#x27;</span>,
<span class="hljs-string">&#x27;Accept&#x27;</span> =&gt; <span class="hljs-string">&#x27;application/json&#x27;</span>,
<span class="hljs-string">&#x27;Authorization&#x27;</span> =&gt; <span class="hljs-string">&#x27;API_KEY&#x27;</span>
}
result = RestClient.post <span class="hljs-string">&#x27;/api/boards/{board}/copy&#x27;</span>,
<span class="hljs-symbol">params:</span> {
}, <span class="hljs-symbol">headers:</span> headers
p JSON.parse(result)
</code></pre>
<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
headers = {
<span class="hljs-string">&#x27;Content-Type&#x27;</span>: <span class="hljs-string">&#x27;multipart/form-data&#x27;</span>,
<span class="hljs-string">&#x27;Accept&#x27;</span>: <span class="hljs-string">&#x27;application/json&#x27;</span>,
<span class="hljs-string">&#x27;Authorization&#x27;</span>: <span class="hljs-string">&#x27;API_KEY&#x27;</span>
}
r = requests.post(<span class="hljs-string">&#x27;/api/boards/{board}/copy&#x27;</span>, headers = headers)
<span class="hljs-built_in">print</span>(r.json())
</code></pre>
<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">&quot;/api/boards/{board}/copy&quot;</span>);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod(<span class="hljs-string">&quot;POST&quot;</span>);
<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
<span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
</code></pre>
<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
<span class="hljs-keyword">import</span> (
<span class="hljs-string">&quot;bytes&quot;</span>
<span class="hljs-string">&quot;net/http&quot;</span>
)
<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">&quot;Content-Type&quot;</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">&quot;multipart/form-data&quot;</span>},
<span class="hljs-string">&quot;Accept&quot;</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">&quot;application/json&quot;</span>},
<span class="hljs-string">&quot;Authorization&quot;</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">&quot;API_KEY&quot;</span>},
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
req, err := http.NewRequest(<span class="hljs-string">&quot;POST&quot;</span>, <span class="hljs-string">&quot;/api/boards/{board}/copy&quot;</span>, data)
req.Header = headers
client := &amp;http.Client{}
resp, err := client.Do(req)
<span class="hljs-comment">// ...</span>
}
</code></pre>
<pre class="highlight tab tab-php"><code> <span class="hljs-string">&#x27;multipart/form-data&#x27;</span>,
<span class="hljs-string">&#x27;Accept&#x27;</span> =&gt; <span class="hljs-string">&#x27;application/json&#x27;</span>,
<span class="hljs-string">&#x27;Authorization&#x27;</span> =&gt; <span class="hljs-string">&#x27;API_KEY&#x27;</span>,
);
<span class="hljs-variable">$client</span> = <span class="hljs-keyword">new</span> \GuzzleHttp\Client();
<span class="hljs-comment">// Define array of request body.</span>
<span class="hljs-variable">$request_body</span> = <span class="hljs-keyword">array</span>();
<span class="hljs-keyword">try</span> {
<span class="hljs-variable">$response</span> = <span class="hljs-variable">$client</span>-&gt;request(<span class="hljs-string">&#x27;POST&#x27;</span>,<span class="hljs-string">&#x27;/api/boards/{board}/copy&#x27;</span>, <span class="hljs-keyword">array</span>(
<span class="hljs-string">&#x27;headers&#x27;</span> =&gt; <span class="hljs-variable">$headers</span>,
<span class="hljs-string">&#x27;json&#x27;</span> =&gt; <span class="hljs-variable">$request_body</span>,
)
);
print_r(<span class="hljs-variable">$response</span>-&gt;getBody()-&gt;getContents());
}
<span class="hljs-keyword">catch</span> (\GuzzleHttp\<span class="hljs-built_in">Exception</span>\BadResponseException <span class="hljs-variable">$e</span>) {
<span class="hljs-comment">// handle exception or api errors.</span>
print_r(<span class="hljs-variable">$e</span>-&gt;getMessage());
}
<span class="hljs-comment">// ...</span>
</code></pre>
<p><code>POST /api/boards/{board}/copy</code></p>
<p><em>Copy a board to a new one</em></p>
<p>If your are board admin or wekan admin, this copies the
given board to a new one.</p>
<blockquote>
<p>Body parameter</p>
</blockquote>
<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">title:</span> <span class="hljs-string">string</span>
</code></pre>
<h3 id="copy_board-parameters">Parameters</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>In</th>
<th>Type</th>
<th>Required</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>board</td>
<td>path</td>
<td>string</td>
<td>true</td>
<td>the board</td>
</tr>
<tr>
<td>body</td>
<td>body</td>
<td>object</td>
<td>true</td>
<td>none</td>
</tr>
<tr>
<td>» title</td>
<td>body</td>
<td>string</td>
<td>true</td>
<td>the title of the new board (default to old one)</td>
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-6">Detailed descriptions</h4>
<p><strong>board</strong>: the board</p>
<blockquote>
<p>Example responses</p>
</blockquote>
<blockquote>
<p>200 Response</p>
</blockquote>
<pre class="highlight tab tab-json"><code><span class="hljs-string">&quot;string&quot;</span>
</code></pre>
<h3 id="copy_board-responses">Responses</h3>
<table>
<thead>
<tr>
<th>Status</th>
<th>Meaning</th>
<th>Description</th>
<th>Schema</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
<td>200 response</td>
<td>string</td>
</tr>
</tbody>
</table>
<aside class="warning">
To perform this operation, you must be authenticated by means of one of the following methods:
UserSecurity
</aside>
<h2 id="add_board_label">add_board_label</h2>
<p><a id="opIdadd_board_label"></a></p>
<blockquote>
@@ -4409,7 +4649,7 @@ adds the label to the board.</p>
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-6">Detailed descriptions</h4>
<h4 id="detailed-descriptions-7">Detailed descriptions</h4>
<p><strong>board</strong>: the board</p>
<blockquote>
<p>Example responses</p>
@@ -4671,7 +4911,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-7">Detailed descriptions</h4>
<h4 id="detailed-descriptions-8">Detailed descriptions</h4>
<p><strong>board</strong>: the ID of the board that we are changing</p>
<p><strong>member</strong>: the ID of the user to change permissions</p>
<h3 id="set_board_member_permission-responses">Responses</h3>
@@ -4889,7 +5129,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-8">Detailed descriptions</h4>
<h4 id="detailed-descriptions-9">Detailed descriptions</h4>
<p><strong>board</strong>: the ID of the board to update</p>
<h3 id="update_board_title-responses">Responses</h3>
<table>
@@ -5292,7 +5532,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-9">Detailed descriptions</h4>
<h4 id="detailed-descriptions-10">Detailed descriptions</h4>
<p><strong>user</strong>: the ID of the user to retrieve the data</p>
<blockquote>
<p>Example responses</p>
@@ -5535,7 +5775,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-10">Detailed descriptions</h4>
<h4 id="detailed-descriptions-11">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>card</strong>: the card ID</p>
<blockquote>
@@ -5820,7 +6060,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-11">Detailed descriptions</h4>
<h4 id="detailed-descriptions-12">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>card</strong>: the card ID</p>
<blockquote>
@@ -6060,7 +6300,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-12">Detailed descriptions</h4>
<h4 id="detailed-descriptions-13">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>card</strong>: the card ID</p>
<p><strong>checklist</strong>: the ID of the checklist</p>
@@ -6369,7 +6609,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-13">Detailed descriptions</h4>
<h4 id="detailed-descriptions-14">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>card</strong>: the card ID</p>
<p><strong>checklist</strong>: the ID of the checklist to remove</p>
@@ -6643,7 +6883,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-14">Detailed descriptions</h4>
<h4 id="detailed-descriptions-15">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>card</strong>: the card ID</p>
<p><strong>checklist</strong>: the ID of the checklist</p>
@@ -6891,7 +7131,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-15">Detailed descriptions</h4>
<h4 id="detailed-descriptions-16">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>card</strong>: the card ID</p>
<p><strong>checklist</strong>: the checklist ID</p>
@@ -7166,7 +7406,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-16">Detailed descriptions</h4>
<h4 id="detailed-descriptions-17">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>card</strong>: the card ID</p>
<p><strong>checklist</strong>: the checklist ID</p>
@@ -7416,7 +7656,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-17">Detailed descriptions</h4>
<h4 id="detailed-descriptions-18">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>card</strong>: the card ID</p>
<p><strong>checklist</strong>: the checklist ID</p>
@@ -7652,7 +7892,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-18">Detailed descriptions</h4>
<h4 id="detailed-descriptions-19">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID of the card</p>
<p><strong>card</strong>: the ID of the card</p>
<blockquote>
@@ -7945,7 +8185,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-19">Detailed descriptions</h4>
<h4 id="detailed-descriptions-20">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID of the card</p>
<p><strong>card</strong>: the ID of the card</p>
<blockquote>
@@ -8185,7 +8425,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-20">Detailed descriptions</h4>
<h4 id="detailed-descriptions-21">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID of the card</p>
<p><strong>card</strong>: the ID of the card</p>
<p><strong>comment</strong>: the ID of the comment to retrieve</p>
@@ -8409,7 +8649,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-21">Detailed descriptions</h4>
<h4 id="detailed-descriptions-22">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID of the card</p>
<p><strong>card</strong>: the ID of the card</p>
<p><strong>comment</strong>: the ID of the comment to delete</p>
@@ -8651,7 +8891,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-22">Detailed descriptions</h4>
<h4 id="detailed-descriptions-23">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>customField</strong>: the list ID</p>
<p><strong>customFieldValue</strong>: the value to look for</p>
@@ -8912,7 +9152,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-23">Detailed descriptions</h4>
<h4 id="detailed-descriptions-24">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<blockquote>
<p>Example responses</p>
@@ -9144,7 +9384,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-24">Detailed descriptions</h4>
<h4 id="detailed-descriptions-25">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>list</strong>: the list ID</p>
<blockquote>
@@ -9477,7 +9717,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-25">Detailed descriptions</h4>
<h4 id="detailed-descriptions-26">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID of the new card</p>
<p><strong>list</strong>: the list ID of the new card</p>
<blockquote>
@@ -9717,7 +9957,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-26">Detailed descriptions</h4>
<h4 id="detailed-descriptions-27">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>list</strong>: the list ID of the card</p>
<p><strong>card</strong>: the card ID</p>
@@ -10321,7 +10561,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-27">Detailed descriptions</h4>
<h4 id="detailed-descriptions-28">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID of the card</p>
<p><strong>list</strong>: the list ID of the card</p>
<p><strong>card</strong>: the ID of the card</p>
@@ -10564,7 +10804,7 @@ is not put in the recycle bin.</p>
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-28">Detailed descriptions</h4>
<h4 id="detailed-descriptions-29">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID of the card</p>
<p><strong>list</strong>: the list ID of the card</p>
<p><strong>card</strong>: the ID of the card</p>
@@ -10845,7 +11085,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-29">Detailed descriptions</h4>
<h4 id="detailed-descriptions-30">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID of the card</p>
<p><strong>list</strong>: the list ID of the card</p>
<p><strong>card</strong>: the ID of the card</p>
@@ -11088,7 +11328,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-30">Detailed descriptions</h4>
<h4 id="detailed-descriptions-31">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>list</strong>: the List ID</p>
<blockquote>
@@ -11321,7 +11561,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-31">Detailed descriptions</h4>
<h4 id="detailed-descriptions-32">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>swimlane</strong>: the swimlane ID</p>
<blockquote>
@@ -12147,7 +12387,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-32">Detailed descriptions</h4>
<h4 id="detailed-descriptions-33">Detailed descriptions</h4>
<p><strong>customField</strong>: the ID of the custom field</p>
<blockquote>
<p>Example responses</p>
@@ -12722,7 +12962,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-33">Detailed descriptions</h4>
<h4 id="detailed-descriptions-34">Detailed descriptions</h4>
<p><strong>customField</strong>: the ID of the custom field</p>
<blockquote>
<p>Example responses</p>
@@ -13716,7 +13956,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-34">Detailed descriptions</h4>
<h4 id="detailed-descriptions-35">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<blockquote>
<p>Example responses</p>
@@ -14056,7 +14296,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-35">Detailed descriptions</h4>
<h4 id="detailed-descriptions-36">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<blockquote>
<p>Example responses</p>
@@ -14288,7 +14528,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-36">Detailed descriptions</h4>
<h4 id="detailed-descriptions-37">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>int</strong>: the integration ID</p>
<blockquote>
@@ -14582,7 +14822,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-37">Detailed descriptions</h4>
<h4 id="detailed-descriptions-38">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>int</strong>: the integration ID</p>
<blockquote>
@@ -14815,7 +15055,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-38">Detailed descriptions</h4>
<h4 id="detailed-descriptions-39">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>int</strong>: the integration ID</p>
<blockquote>
@@ -15048,7 +15288,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-39">Detailed descriptions</h4>
<h4 id="detailed-descriptions-40">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>int</strong>: the integration ID</p>
<blockquote>
@@ -15302,7 +15542,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-40">Detailed descriptions</h4>
<h4 id="detailed-descriptions-41">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>int</strong>: the integration ID</p>
<blockquote>
@@ -15518,7 +15758,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-41">Detailed descriptions</h4>
<h4 id="detailed-descriptions-42">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<blockquote>
<p>Example responses</p>
@@ -15785,7 +16025,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-42">Detailed descriptions</h4>
<h4 id="detailed-descriptions-43">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<blockquote>
<p>Example responses</p>
@@ -16017,7 +16257,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-43">Detailed descriptions</h4>
<h4 id="detailed-descriptions-44">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>list</strong>: the List ID</p>
<blockquote>
@@ -16246,7 +16486,7 @@ The list is not put in the recycle bin.</p>
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-44">Detailed descriptions</h4>
<h4 id="detailed-descriptions-45">Detailed descriptions</h4>
<p><strong>board</strong>: the board ID</p>
<p><strong>list</strong>: the ID of the list to remove</p>
<blockquote>
@@ -16473,7 +16713,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-45">Detailed descriptions</h4>
<h4 id="detailed-descriptions-46">Detailed descriptions</h4>
<p><strong>board</strong>: the ID of the board</p>
<blockquote>
<p>Example responses</p>
@@ -16740,7 +16980,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-46">Detailed descriptions</h4>
<h4 id="detailed-descriptions-47">Detailed descriptions</h4>
<p><strong>board</strong>: the ID of the board</p>
<blockquote>
<p>Example responses</p>
@@ -16972,7 +17212,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-47">Detailed descriptions</h4>
<h4 id="detailed-descriptions-48">Detailed descriptions</h4>
<p><strong>board</strong>: the ID of the board</p>
<p><strong>swimlane</strong>: the ID of the swimlane</p>
<blockquote>
@@ -17224,7 +17464,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-48">Detailed descriptions</h4>
<h4 id="detailed-descriptions-49">Detailed descriptions</h4>
<p><strong>board</strong>: the ID of the board</p>
<p><strong>swimlane</strong>: the ID of the swimlane to edit</p>
<blockquote>
@@ -17458,7 +17698,7 @@ System.out.println(response.toString());
</tr>
</tbody>
</table>
<h4 id="detailed-descriptions-49">Detailed descriptions</h4>
<h4 id="detailed-descriptions-50">Detailed descriptions</h4>
<p><strong>board</strong>: the ID of the board</p>
<p><strong>swimlane</strong>: the ID of the swimlane</p>
<blockquote>
+36 -1
View File
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v7.38
version: v7.41
description: |
The REST API allows you to control and extend Wekan with ease.
@@ -963,6 +963,41 @@ paths:
properties:
board_cards_count:
type: integer
/api/boards/{board}/copy:
post:
operationId: copy_board
summary: Copy a board to a new one
description: |
If your are board admin or wekan admin, this copies the
given board to a new one.
tags:
- Boards
consumes:
- multipart/form-data
- application/json
parameters:
- name: title
in: formData
description: |
the title of the new board (default to old one)
type: string
required: true
- name: board
in: path
description: |
the board
type: string
required: true
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
schema:
type: string
/api/boards/{board}/custom-fields:
get:
operationId: get_all_custom_fields
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 738,
appVersion = 741,
# Increment this for every release.
appMarketingVersion = (defaultText = "7.38.0~2024-03-10"),
appMarketingVersion = (defaultText = "7.41.0~2024-03-18"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+15 -12
View File
@@ -80,14 +80,17 @@ if [ -z "$MONGO_URL" ]; then
# start mongo deamon
BIND_OPTIONS=""
SH_BIND_OPTIONS=""
if [ "nill" != "$MONGODB_BIND_UNIX_SOCKET" ] && [ "x" != "x${MONGODB_BIND_UNIX_SOCKET}" ]; then
BIND_OPTIONS+=" --unixSocketPrefix $MONGODB_BIND_UNIX_SOCKET"
fi
if [ "x" != "x${MONGODB_BIND_IP}" ]; then
BIND_OPTIONS+=" --bind_ip $MONGODB_BIND_IP"
SH_BIND_OPTIONS+=" --host $MONGODB_BIND_IP"
fi
if [ "x" != "x${MONGODB_PORT}" ]; then
BIND_OPTIONS+=" --port $MONGODB_PORT"
SH_BIND_OPTIONS+=" --port $MONGODB_PORT"
fi
echo "mongodb bind options: $BIND_OPTIONS"
@@ -109,16 +112,16 @@ if [ -z "$MONGO_URL" ]; then
# Disable MongoDB telemetry and free monitoring
mongosh wekan --eval 'disableTelemetry();' $BIND_OPTIONS
mongosh wekan --eval 'db.disableFreeMonitoring();' $BIND_OPTIONS
mongosh wekan --eval 'disableTelemetry();' $SH_BIND_OPTIONS
mongosh wekan --eval 'db.disableFreeMonitoring();' $SH_BIND_OPTIONS
# Snap: Disable apparmor="DENIED" at syslog
# https://github.com/wekan/wekan/issues/4855
mongosh wekan --eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' $BIND_OPTIONS
mongosh wekan --eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' $SH_BIND_OPTIONS
# Drop indexes on database upgrade, when starting MongoDB
#mongosh wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $BIND_OPTIONS
mongosh wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.4" });' $BIND_OPTIONS
#mongosh wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $SH_BIND_OPTIONS
mongosh wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.4" });' $SH_BIND_OPTIONS
# Delete incomplete uploads so that they would not prevent starting WeKan
mongosh wekan --eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' $BIND_OPTIONS
mongosh wekan --eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' $SH_BIND_OPTIONS
else
@@ -138,15 +141,15 @@ else
fi
# Disable MongoDB telemetry and free monitoring
mongosh wekan --eval 'disableTelemetry();' $BIND_OPTIONS
mongosh wekan --eval 'db.disableFreeMonitoring();' $BIND_OPTIONS
mongosh wekan --eval 'disableTelemetry();' $SH_BIND_OPTIONS
mongosh wekan --eval 'db.disableFreeMonitoring();' $SH_BIND_OPTIONS
# Snap: Disable apparmor="DENIED" at syslog
# https://github.com/wekan/wekan/issues/4855
mongosh wekan --eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' $BIND_OPTIONS
mongosh wekan --eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' $SH_BIND_OPTIONS
# Drop indexes on database upgrade, when starting MongoDB
#mongosh wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $BIND_OPTIONS
mongosh wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.2" });' $BIND_OPTIONS
#mongosh wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $SH_BIND_OPTIONS
mongosh wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.2" });' $SH_BIND_OPTIONS
# Delete incomplete uploads so that they would not prevent starting WeKan
mongosh wekan --eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' $BIND_OPTIONS
mongosh wekan --eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' $SH_BIND_OPTIONS
fi
+4 -4
View File
@@ -1,5 +1,5 @@
name: wekan
version: '7.38'
version: '7.41'
base: core20
summary: Open Source kanban
description: |
@@ -170,9 +170,9 @@ parts:
# Cleanup
mkdir .build
cd .build
wget https://github.com/wekan/wekan/releases/download/v7.38/wekan-7.38-amd64.zip
unzip wekan-7.38-amd64.zip
rm wekan-7.38-amd64.zip
wget https://github.com/wekan/wekan/releases/download/v7.41/wekan-7.41-amd64.zip
unzip wekan-7.41-amd64.zip
rm wekan-7.41-amd64.zip
cd ..
##cd .build/bundle
##find . -type d -name '*-garbage*' | xargs rm -rf