Commit 079045a4 authored by ransome1's avatar ransome1
Browse files

master needs to be set euqal with develop due to release of v1.1.7

parents 4051d40e 5d87aaef
# Maintainer: ransome <ransome@uber.space>
pkgname="sleek"
pkgdesc="Todo app based on the todo.txt format for Linux, free and open-source"
arch=("x86_64")
url="https://github.com/ransome1/sleek/"
license=("MIT")
options=(!strip)
makedepends=("yarn" "nodejs<16.0.0")
depends=("electron" "nodejs")
source=("${url}archive/refs/tags/v${pkgver}.zip" "sleek.desktop" "sleek")
build() {
msg2 "Unzipping v${pkgver}.zip"
unzip -o "v${pkgver}.zip"
cd "$srcdir/$pkgname-${pkgver}"
msg2 "Installing node modules"
yarn install
}
package() {
cd "$srcdir/$pkgname-${pkgver}"
msg2 "Building sleek with packaged Electron"
yarn run pack
install -Dm644 "dist/linux-unpacked/resources/app.asar" "$pkgdir/usr/lib/$pkgname.asar"
install -d -Dm644 "${pkgdir}/usr/share"
chmod 755 "${pkgdir}/usr/share"
cp -r "dist/linux-unpacked/${pkgname}" "${pkgdir}/usr/share"
msg2 "Installing LICENSE"
install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname"
msg2 "Installing startup script and desktop file"
install -Dm755 "../${pkgname}" -t "$pkgdir/usr/bin/"
install -Dm644 "../${pkgname}.desktop" -t "$pkgdir/usr/share/applications/"
msg2 "Installing icons"
for size in 22 24 32 48 64 128 256 512; do
install -Dm644 "assets/icons/${size}x${size}.png" "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/${pkgname}.png"
done
install -Dm644 "assets/icons/512x512.png" "${pkgdir}/usr/share/icons/hicolor/scalable/apps/${pkgname}.png"
}
#! /bin/bash
# shellcheck disable=SC2035
cd ./flatten || exit $?
sha1sum * >sha1sum.txt || exit $?
sha256sum * >sha256sum.txt || exit $?
sha512sum * >sha512sum.txt || exit $?
#! /usr/bin/env python3
from os import environ, makedirs
import re
target = environ.get('TARGET')
if not target:
print('::error ::TARGET is required but missing')
exit(1)
release_tag = environ.get('RELEASE_TAG')
if not release_tag:
print('::error ::RELEASE_TAG is required but missing')
exit(1)
checksum = None
word_splitter = re.compile(r'\s+')
for line in open('sha1sum.txt').readlines():
line = line.strip()
if line.endswith(target):
checksum, _ = word_splitter.split(line)
maintainer = '# Maintainer: Robin Ahle <ransome@uber.space>\n'
readme_url = f'https://raw.githubusercontent.com/ransome1/sleek/{release_tag}/README.md'
license_url = f'https://raw.githubusercontent.com/ransome1/sleek/{release_tag}/LICENSE.md'
opening = maintainer + '\n# This file is automatically generated. Do not edit.\n'
print('Generating PKGBUILD for sleek...')
makedirs('./pkgbuild/sleek', exist_ok=True)
with open('./pkgbuild/sleek/PKGBUILD', 'w') as pkgbuild:
content = opening + '\n'
content += 'pkgname=sleek\n'
content += f'pkgver={release_tag}\n'
source_url = f'https://github.com/ransome1/sleek/archive/{release_tag}.tar.gz'
content += f'source=(sleek-{release_tag}.tar.gz::{source_url})\n'
content += 'sha1sums=(SKIP)\n'
content += open('./github/workflows/PKGBUILD/PKGBUILD').read() + '\n'
pkgbuild.write(content)
print('Generating PKGBUILD for sleek...')
makedirs('./pkgbuild/sleek', exist_ok=True)
with open('./pkgbuild/sleek/PKGBUILD', 'w') as pkgbuild:
content = opening + '\n'
content += 'pkgname=sleek\n'
content += f'pkgver={release_tag}\n'
source_url_prefix = f'https://github.com/ransome1/sleek/releases/download/{release_tag}'
source_url = f'{source_url_prefix}/sleek-{target}'
supported_completions = ['bash', 'fish', 'zsh']
completion_source = ' '.join(
f'completion.{release_tag}.{ext}::{source_url_prefix}/completion.{ext}'
for ext in supported_completions
)
content += f'source=(sleek-{checksum}::{source_url} {completion_source} {readme_url} {license_url})\n'
content += f'_checksum={checksum}\n'
completion_checksums = ' '.join('SKIP' for _ in supported_completions)
content += f'_completion_checksums=({completion_checksums})\n'
content += open('./github/workflows/PKGBUILD/PKGBUILD').read() + '\n'
pkgbuild.write(content)
#!/bin/sh
export AUR=true
exec electron /usr/lib/sleek.asar "$@"
[Desktop Entry]
Name=sleek
Exec=/usr/bin/sleek
Terminal=false
Type=Application
Icon=sleek
Comment=Todo app based on the todo.txt format for Linux, free and open-source
Categories=ProjectManagement
name: Code scan on branch push and mirror to opencode.net
on:
push:
branches:
- '*'
jobs:
snyk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
njsscan:
needs: snyk
name: njsscan
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v2
- name: nodejsscan scan
id: njsscan
uses: ajinabraham/njsscan-action@master
with:
args: '. --sarif --output results.sarif || true'
- name: Upload njsscan report
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: results.sarif
codeql:
needs: njsscan
name: CodeQL
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
mirror:
name: Mirror code to opencode.net
runs-on: ubuntu-latest
needs: codeql
steps: # <-- must use actions/checkout@v2 before mirroring!
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: pixta-dev/repository-mirroring-action@v1
with:
target_repo_url:
git@www.opencode.net:ransome/sleek.git
ssh_private_key: # <-- use 'secrets' to pass credential information.
${{ secrets.GITLAB_SSH_PRIVATE_KEY }}
name: Code scan, build & release
name: Build & release
on:
push:
tags:
......@@ -19,6 +19,11 @@ jobs:
node-version: 14
- name: Run Electron Builder
uses: samuelmeuli/action-electron-builder@v1
env:
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
with:
max_attempts: 3
github_token: ${{ secrets.github_token }}
......@@ -37,9 +42,6 @@ jobs:
with:
node-version: 14
- name: Run Electron Builder
env:
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
CSC_LINK: ${{ secrets.CSC_LINK }}
uses: samuelmeuli/action-electron-builder@v1
with:
max_attempts: 3
......@@ -63,52 +65,4 @@ jobs:
with:
max_attempts: 3
github_token: ${{ secrets.github_token }}
release: ${{ startsWith(github.ref, 'refs/tags/v') }}
njsscan:
name: njsscan
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v2
- name: nodejsscan scan
id: njsscan
uses: ajinabraham/njsscan-action@master
with:
args: '. --sarif --output results.sarif || true'
- name: Upload njsscan report
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: results.sarif
codeql:
needs: njsscan
name: CodeQL
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
mirror:
name: Mirror code to opencode.net
runs-on: ubuntu-latest
needs: codeql
steps: # <-- must use actions/checkout@v2 before mirroring!
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: pixta-dev/repository-mirroring-action@v1
with:
target_repo_url:
git@www.opencode.net:ransome/sleek.git
ssh_private_key: # <-- use 'secrets' to pass credential information.
${{ secrets.GITLAB_SSH_PRIVATE_KEY }}
release: ${{ startsWith(github.ref, 'refs/tags/v') }}
\ No newline at end of file
node_modules/
dist/
*.log
*.DS_Store
*.snap
*.bak
snap/local/
*.py
*.ini
.gitignore
.git/
*.db:encryptable
*.db
System Volume Information/
Thumbs.db
flatpak/generated-sources.json
flatpak/com.github.ransome1.sleek.yml
assets/icons/bak
build/dmg
squashfs-root/
*.db:encryptable
*.DS_Store
*.ini
*.log
*.py
*.snap
*_done.txt
*conflict*
.eslintrc.json
.git/
.gitignore
.stylelintrc.json
package-lock.json
.vs/
.vscode/
.yarnclean
assets/icons/bak
dist/
flatpak/com.github.ransome1.sleek.yml
flatpak/generated-sources.json
node_modules/
package-lock.json
sleek.sublime-project
sleek.sublime-workspace
\ No newline at end of file
sleek.sublime-workspace
snap/local/
squashfs-root/
System Volume Information/
Thumbs.db
src/css/
*.drawio*
*.provisionprofile
\ No newline at end of file
# Contributing
## What is needed?
### Refactor JavaScript
sleek is written in plain vanilla JavaScript. I'm doing my best to keep the code as slim and tidy as possible. But I'm not a professional developer and limited on time I can invest in this project. You can contribute by reviewing the JavaScript with the aim of making sleek faster and more maintainable.
### Clean up the CSS
In order to create sleeks' unique look lot of (S)CSS had been written. If you have experience on CSS you can review and optimise it.
### Work on feature requests
Over the time plenty of feature requests had been files for sleek: https://github.com/ransome1/sleek/issues. You can simply pick feature request and start working on it. Every feature needs to be contributed with a sufficient amount of test cases (see "Write test cases"). There is a prioritised backlog too: https://github.com/ransome1/sleek/projects/2
### Enhance the CI process
sleek is being distributed through Github and many other platforms (Snap Store, Flathub, Arch User Repository, Windows Store, Mac App Store). Releasing sleek is still plenty of work and it would be of great help if the releasing process would be further automated. For instance the build process on Flathub or AUR could be triggered on tag creation on Github. The current CI configuration can be found here: https://github.com/ransome1/sleek/blob/develop/.github/workflows/github-ci.yml
### Enhance the design
If you have interface design experience you can propose design changes. As sleek has a strong focus on its design all changes should be discussed before any implementation is being done.
### Translate sleek into your language
Plenty of languages are already available, but if yours is missing, you can translate the app to it.
## Write test cases
## File pull request
\ No newline at end of file
# sleek
## sleek is a todo app based on todo.txt, free and open-source. Available for Linux, Windows and MacOS
## sleek is a free and open-source (FOSS) todo manager that makes use of the todo.txt format. Available for Linux, Windows and MacOS
+ [Screenshots](#screenshots)
+ [Support sleek](#support-sleek)
+ [Get it from Microsoft Store](#get-sleek-from-microsoft-store)
......@@ -13,7 +13,7 @@
+ [Features](#features)
+ [Used libraries](#used-libraries)
sleek is an open-source todo app that makes use of the todo.txt format. sleeks GUI is modern and simple but still offers a decent set of functions which help users getting things done. sleek is available as a client for Windows, MacOS and Linux.
sleek is a free and open-source (FOSS) todo manager that makes use of the todo.txt format. sleeks GUI is modern and simple but still offers a decent set of functions which help users getting things done. sleek is available as a client for Windows, MacOS and Linux.
Users can add contexts, projects, priorities, due dates, recurrences or threshold dates to their todos. These todo.txt attributes can then be used in full-text search, as filters or to group and sort the todo list.
......@@ -22,8 +22,12 @@ sleek manages and watches multiple todo.txt files continuously for changes, whic
Todos with due date or repeating todos will trigger notifications and completed todos can be hidden or archived into separate done.txt files. If users have tons of todos, a compact view can come in handy.
### Screenshots
![Alt text](assets/screenshots/linux/todo_list.png?raw=true "Screenshot of sleek's main view on Linux")
![Alt text](assets/screenshots/linux/multiline_autocomplete_dark.png?raw=true "Screenshot of sleek's auto complete function and multi line todo feature on Linux")
![Alt text](assets/screenshots/mac/main.png?raw=true "Screenshot of sleek's todo list view")
![Alt text](assets/screenshots/mac/drawer.png?raw=true "Screenshot of sleek's auto complete function and multi line todo feature")
![Alt text](assets/screenshots/mac/search.png?raw=true "Screenshot of sleek's todo list sorted by projects with due date picker shown")
### sleeks state of development
A prioritized backlog of new features and known issues as well as an overview on what is being worked on at the moment can be found <a href="https://github.com/ransome1/sleek/projects/2">here</a>.
### Support sleek
* Star, fork and watch it on Github.
......@@ -68,11 +72,8 @@ You can download sleek for Windows, MacOS and Linux from
3. Install dependencies `yarn install --production`
4. Build sleek `yarn build:windows` or `yarn build:linux` or `yarn build:macos`
### sleeks state of development
A prioritized backlog of new features and known issues can be found <a href="https://github.com/ransome1/sleek/projects/2">here</a>.
### Features
* An existing todo.txt file can be used or a new one can be created
* sleek can use existing todo.txt files or create new ones
* Todos can be enriched and searched for by
- priorities
- contexts
......@@ -80,21 +81,19 @@ A prioritized backlog of new features and known issues can be found <a href="htt
- due dates
- creation dates
- <a href="https://github.com/ransome1/sleek/wiki/Recurring-todos-(rec:)">recurrences</a>
- <a href="https://github.com/ransome1/sleek/wiki/Deferred-todos-(t:)">thresholds</a>
* Todo-List can be grouped and sorted by priorities, due dates, creation dates, contexts or projects
* The sorting order can be defined on all available levels
* Top level sorting can be inverted
* Sorting can be according to the order in file
- <a href="https://github.com/ransome1/sleek/wiki/Deferred-todos-(t:)">threshold dates</a>
* Todo list can be sorted by priorities, due dates, creation dates, contexts and projects or simply by file order
* Todos can be filtered by contexts, projects and priorities
* Todos can be looked up by full-text search
* Todos can be looked up by a full-text search that is compatible with the todo.txt syntax
* Autocomplete function suggests available contexts and projects
* Dates and priorities can be selected by built-in picker elements
* <a href="https://github.com/ransome1/sleek/wiki/Keyboard-shortcuts">Keyboard shortcuts following todotxt.net</a>
* Tabindex available
* <a href="https://github.com/ransome1/sleek/wiki/Hidden-todos-(h:)">A todo can be hidden but its attributes will be available in the filter drawer and autocomplete function</a>
* Due dates trigger alarms and appear as badges in sleeks icon
* Dark and light mode can be toggled
* A compact view is available
* Completed todos can be bulk archived to a separate done.txt ([name of todo file]_done.txt) file
* Completed todos can be bulk archived to a separate done.txt file
* Completed todos can be shown or hidden
* Multi line todos can be created
* Filters can be renamed or deleted by right clicking on them
......@@ -132,3 +131,8 @@ A prioritized backlog of new features and known issues can be found <a href="htt
- chokidar: https://github.com/paulmillr/chokidar
- Sugar: https://github.com/andrewplummer/Sugar
- PEG.js: https://github.com/pegjs/pegjs
- Playwright: https://github.com/microsoft/playwright
- Sass: https://github.com/sass/sass
- eslint: https://github.com/eslint/eslint
- electron-reloader: https://github.com/sindresorhus/electron-reloader
- cross-env: https://github.com/kentcdodds/cross-env
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1000"
height="1000"
viewBox="0 0 264.58333 264.58334"
version="1.1"
id="svg8"
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"
sodipodi:docname="20210503_sleek_tray.svg"
inkscape:export-filename="/home/ransome/Development/sleek/assets/icons/tray/tray@4x.png"
inkscape:export-xdpi="6.1399999"
inkscape:export-ydpi="6.1399999">
<defs
id="defs2">
<linearGradient
id="linearGradient943"
osb:paint="solid">
<stop
style="stop-color:#075a44;stop-opacity:1;"
offset="0"
id="stop941" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="sleek_gradiant">
<stop
style="stop-color:#075a44;stop-opacity:1"
offset="0"
id="stop855" />
<stop
style="stop-color:#bc30ba;stop-opacity:1"
offset="1"
id="stop857" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#sleek_gradiant"
id="linearGradient863"
gradientUnits="userSpaceOnUse"
x1="20.609758"
y1="-35.978325"
x2="-376.78461"
y2="-271.12573" />
<linearGradient
inkscape:collect="always"
xlink:href="#sleek_gradiant"
id="linearGradient913"
x1="-264.05746"
y1="-60.426601"
x2="-5.0754561"
y2="-201.82214"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="0.69044441"
inkscape:cx="473.99304"
inkscape:cy="542.20488"
inkscape:document-units="mm"
inkscape:current-layer="layer2"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1874"
inkscape:window-height="1051"
inkscape:window-x="46"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="true"
showborder="false" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="outer gradiant">
<rect
style="opacity:1;fill:url(#linearGradient863);fill-opacity:1;stroke:none;stroke-width:0.28639;stroke-opacity:1"
id="rect184"
width="264.29694"
height="264.29694"
x="-264.44012"
y="-264.44012"
inkscape:export-filename="/home/ransome/development/sleek/assets/icons/300x300.png"
inkscape:export-xdpi="28.799999"
inkscape:export-ydpi="28.799999"
transform="scale(-1)"
ry="132.14847" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="inner gradiant">
<rect
style="opacity:0.531869;mix-blend-mode:normal;fill:url(#linearGradient913);fill-opacity:1;stroke:none;stroke-width:0.28639;stroke-opacity:1"
id="rect184-3"
width="195.59337"
height="195.59337"
x="-230.18045"
y="-231.50604"
inkscape:export-filename="/home/ransome/development/sleek/assets/icons/300x300.png"
inkscape:export-xdpi="28.799999"
inkscape:export-ydpi="28.799999"
transform="scale(-1)"
ry="97.796684"
rx="97.796684" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="sleek (text)"
style="display:none"
sodipodi:insensitive="true">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:90.07px;line-height:90%;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:-4.50352px;word-spacing:0px;stroke-width:0.264583"
x="130.22496"
y="165.18904"
id="text1012-5"
inkscape:export-filename="/home/ransome/development/sleek/assets/icons/300x300.png"
inkscape:export-xdpi="28.799999"
inkscape:export-ydpi="28.799999"><tspan
x="128.72379"
y="165.18904"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:90.07px;font-family:FreeSans;-inkscape-font-specification:'FreeSans Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:-3.00234px;text-anchor:middle;fill:#ffffff;stroke-width:0.264583"
dx="0 0 0 0 0 0 0 0 0 0 0"
dy="0 0 0 0 0 0 0 0 0 0 0"
rotate="0 0 0 0 0 0 0 0 0 0 0 0 0 0"
sodipodi:role="line"
id="tspan1178-6">sleek</tspan></text>
</g>
</svg>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment