Skip to content

Commit 947c340

Browse files
authored
Merge branch 'master' into patch-1
2 parents d7df033 + 257124a commit 947c340

111 files changed

Lines changed: 8520 additions & 80 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
name: Publish PR Screenshot
2+
3+
on:
4+
workflow_run:
5+
workflows:
6+
- ".github/workflows/test.yml"
7+
types: [completed]
8+
9+
jobs:
10+
publish:
11+
if: >
12+
github.event.workflow_run.conclusion == 'success' &&
13+
github.event.workflow_run.event == 'pull_request' &&
14+
github.repository == 'AppImage/appimage.github.io'
15+
runs-on: ubuntu-latest
16+
permissions:
17+
actions: read
18+
contents: write
19+
pull-requests: write
20+
env:
21+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
22+
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v3
26+
27+
- name: Extract PR number from event
28+
id: extract-pr
29+
shell: bash
30+
run: |
31+
PR_NUMBER=$(jq -r '.workflow_run.pull_requests[0].number // empty' "$GITHUB_EVENT_PATH")
32+
echo "PR_NUMBER=${PR_NUMBER}" >> $GITHUB_ENV
33+
echo "PR_NUMBER=${PR_NUMBER}"
34+
echo "pr_number=${PR_NUMBER}" >> $GITHUB_OUTPUT
35+
- name: Download screenshot artifacts
36+
uses: dawidd6/action-download-artifact@v2
37+
with:
38+
run_id: ${{ github.event.workflow_run.id }}
39+
name: pr-screenshots
40+
path: ./out
41+
if_no_artifact_found: ignore
42+
43+
- name: Prepare files
44+
id: prep
45+
shell: bash
46+
run: |
47+
set -e
48+
mkdir -p upload
49+
: > upload/list.txt
50+
SHORT="${HEAD_SHA::8}"
51+
COUNT=0
52+
FALLBACK="run-${{ github.event.workflow_run.id }}"
53+
for f in out/*.png; do
54+
[ -f "$f" ] || continue
55+
base="$(basename "$f")"
56+
appname="${base%.png}" # Remove .png extension to get app name
57+
# Produce deterministic upload name with app name
58+
PN="${PR_NUMBER:-$FALLBACK}"
59+
name="pr-${PN}-${SHORT}-${appname}.png"
60+
cp "$f" "upload/${name}"
61+
echo "${name}" >> upload/list.txt
62+
COUNT=$((COUNT+1))
63+
done
64+
echo "COUNT=${COUNT}" >> $GITHUB_ENV
65+
echo "count=${COUNT}" >> $GITHUB_OUTPUT
66+
67+
- name: Ensure release exists (published)
68+
shell: bash
69+
run: |
70+
gh release view ci-screenshots >/dev/null 2>&1 || \
71+
gh release create ci-screenshots -t "CI Screenshots" -n "Automated screenshots from PRs" --prerelease
72+
gh release edit ci-screenshots --draft=false
73+
74+
- name: Upload assets
75+
if: ${{ steps.prep.outputs.count != '0' }}
76+
shell: bash
77+
run: |
78+
while IFS= read -r name; do
79+
gh release upload ci-screenshots "upload/${name}" --clobber
80+
done < upload/list.txt
81+
82+
- name: Comment on PR with images
83+
if: ${{ steps.prep.outputs.count != '0' && steps.extract-pr.outputs.pr_number != '' }}
84+
shell: bash
85+
run: |
86+
repo="${{ github.repository }}"
87+
{
88+
echo "Automated screenshot(s) for PR #${PR_NUMBER} (commit ${HEAD_SHA}):"
89+
echo ""
90+
while IFS= read -r name; do
91+
url="https://github.com/${repo}/releases/download/ci-screenshots/${name}"
92+
echo "![Screenshot](${url})"
93+
echo ""
94+
done < upload/list.txt
95+
} > comment.txt
96+
gh api "repos/${repo}/issues/${PR_NUMBER}/comments" -F body=@comment.txt
97+

.github/workflows/test.yml

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
name: Test
2+
13
on:
24
push:
35
branches:
@@ -19,6 +21,7 @@ jobs:
1921
runs-on: ubuntu-22.04
2022
timeout-minutes: 10
2123
permissions:
24+
actions: write
2225
contents: write
2326
pull-requests: write
2427
steps:
@@ -46,6 +49,10 @@ jobs:
4649
sudo gem install dupervisor -v 1.0.5 # To convert ini to yaml files
4750
sudo npm install -g asar # to get pacakges.json from resources/app.asar for electron-builder applications
4851
# npm install -g @alexlafroscia/yaml-merge # to merge yaml files
52+
- name: Mark screenshot start (PR only)
53+
if: github.event_name == 'pull_request'
54+
run: |
55+
touch .screenshots_start
4956
- name: Main test
5057
# shell: bash
5158
run: |
@@ -83,6 +90,28 @@ jobs:
8390
# xpra stop :99
8491
killall Xvfb
8592
# bundle exec jekyll build # https://help.github.com/en/articles/viewing-jekyll-build-error-messages#configuring-a-third-party-service-to-display-jekyll-build-error-messages
93+
- name: Prepare screenshots for upload
94+
if: github.event_name == 'pull_request'
95+
shell: bash
96+
run: |
97+
mkdir -p screenshots-upload
98+
# only files modified during this run
99+
while IFS= read -r screenshot; do
100+
[ -f "$screenshot" ] || continue
101+
appname=$(basename "$(dirname "$screenshot")")
102+
# Sanitize filename: allow letters, digits, dot, underscore, hyphen
103+
safe_name=$(echo "$appname" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9._-')
104+
cp "$screenshot" "screenshots-upload/${safe_name}.png"
105+
done < <(find database -type f -path '*/screenshot.png' -newer .screenshots_start -print)
106+
ls -la screenshots-upload/ || true
107+
- name: Upload screenshot artifact
108+
if: github.event_name == 'pull_request'
109+
uses: actions/upload-artifact@v4
110+
with:
111+
name: pr-screenshots
112+
path: screenshots-upload/*.png
113+
if-no-files-found: ignore
114+
retention-days: 7
86115
- name: Check log
87116
if: github.event_name == 'pull_request' && github.event.pull_request.user.login == 'probonopd'
88117
shell: bash
@@ -91,13 +120,12 @@ jobs:
91120
grep -r "Running as root without --no-sandbox is not supported" log.txt && MESSAGE="Pending #2563 (\`Running as root without --no-sandbox is not supported\`)." && exit 1
92121
grep -r "version \`GLIBC_.*' not found" && MESSAGE="This was compiled on a too new system and hence cannot run on all still-supported versions of Ubuntu." && exit 1
93122
echo "${MESSAGE}"
94-
SCREENSHOT_URL=$(cat log.txt | grep -o -e "https://i.imgur.com.*.png") || true
95-
if [[ -z "${SCREENSHOT_URL}" ]]; then
96-
echo "No screenshot URL found."
123+
COUNT=$(ls database/*/screenshot.png 2>/dev/null | wc -l)
124+
if [[ "${COUNT}" -eq 0 ]]; then
125+
echo "No screenshot file found."
97126
exit 1
98127
fi
99-
echo "SCREENSHOT_URL=$SCREENSHOT_URL" >> $GITHUB_ENV || true
100-
echo "SCREENSHOT_URL: ${SCREENSHOT_URL}" || true
128+
echo "Found ${COUNT} screenshot file(s)."
101129
# The following is disabled because it gives errors about missing permissions
102130
# whenever a PR is made by anyone but the repo maintainer
103131
# - name: Post Screenshot URL

apps/Crescat.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
layout: app
3+
4+
permalink: /Crescat/
5+
6+
icons:
7+
- Crescat/icons/128x128/Crescat.png
8+
9+
screenshots:
10+
- Crescat/screenshot.png
11+
12+
authors:
13+
14+
links:
15+
16+
desktop:
17+
Desktop Entry:
18+
Name: Crescat
19+
Exec: AppRun --no-sandbox %U
20+
Terminal: false
21+
Type: Application
22+
Icon: Crescat
23+
StartupWMClass: Crescat
24+
X-AppImage-Version: 1.5.2
25+
Categories: Utility
26+
AppImageHub:
27+
X-AppImage-Signature: 'directory ''/home/runner/.gnupg'' created keybox ''/home/runner/.gnupg/pubring.kbx''
28+
created [don''t know]: invalid packet (ctb=0a) no signature found the signature
29+
could not be verified. Please remember that the signature file (.sig or .asc)
30+
should be the first file given on the command line.'
31+
X-AppImage-Type: 2
32+
X-AppImage-Architecture: x86_64
33+
34+
electron:
35+
main: main.js
36+
author: Crescat <matteo@crescat.no>
37+
license: UNLICENSED
38+
dependencies:
39+
"@todesktop/runtime": 1.5.7-beta.1
40+
desktopifyServerVersion: 1.554.0
41+
productName: Crescat
42+
homepage: https://app.crescat.io
43+
repository: https://github.com/ToDesktop/desktopify/
44+
electronVersion: 33.2.0
45+
desktopifyVersion: 6.6.0
46+
---

apps/FileShows.md

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
---
2+
layout: app
3+
4+
permalink: /FileShows/
5+
description: A file explorer with glob patterns and file streams
6+
license: GPL-3.0-or-later
7+
8+
icons:
9+
- FileShows/icons/512x512/fileshows.png
10+
screenshots:
11+
- https://webpath.iche2.com/screenshots/fileshows/linux/en/home-default.png
12+
13+
authors:
14+
15+
links:
16+
17+
desktop:
18+
Desktop Entry:
19+
Version: 1.0
20+
Type: Application
21+
Name: FileShows
22+
Comment: A file explorer with glob patterns and file streams
23+
Categories: Utility
24+
Icon: fileshows
25+
Exec: AppRun %F
26+
Terminal: false
27+
StartupNotify: true
28+
StartupWMClass: FileShows
29+
MimeType: inode/directory
30+
AppImageHub:
31+
X-AppImage-Signature: 'directory ''/home/runner/.gnupg'' created keybox ''/home/runner/.gnupg/pubring.kbx''
32+
created [don''t know]: invalid packet (ctb=0a) no signature found the signature
33+
could not be verified. Please remember that the signature file (.sig or .asc)
34+
should be the first file given on the command line.'
35+
X-AppImage-Type: 2
36+
X-AppImage-Architecture: x86_64
37+
38+
appdata:
39+
Type: desktop-application
40+
ID: com.iche2.fileshows
41+
Name:
42+
C: FileShows
43+
Summary:
44+
C: A file explorer with glob patterns and file streams
45+
Description:
46+
C: >-
47+
<p>No Ads, No Registration, No Network Access, Minimal Permissions; Local Data Storage, Privacy Guaranteed.</p>
48+
49+
<ul>
50+
<li>Smart Matching: Supports file/path wildcards and content regular expressions for recursive, precise targeting.</li>
51+
<li>Batch Processing: Incremental mirroring, duplicate finding, searching, replacing, archiving, unarchiving, one-click
52+
cleaning, and more, for convenient operations.</li>
53+
<li>Secure Deletion: Multi-pass overwrite mechanisms ensure files are permanently unrecoverable.</li>
54+
<li>Scheduled Tasks: Execute file management tasks at scheduled times, compatible with CRON expressions.</li>
55+
</ul>
56+
57+
<p>Customisation: Write custom rule scripts for complete command over file operations, similar to writing a Makefile,
58+
via the open-source CLI tool.</p>
59+
ProjectLicense: GPL-3.0-or-later
60+
Categories:
61+
- Utility
62+
- FileTools
63+
- FileManager
64+
- Archiving
65+
- Compression
66+
- Security
67+
Keywords:
68+
C:
69+
- file tools
70+
- file manager
71+
- file explorer
72+
- file stream
73+
- make file
74+
- glob
75+
- regexp
76+
- mirror
77+
- sync
78+
- backup
79+
- archiving
80+
- compression
81+
- decompression
82+
- delete
83+
- secure deletion
84+
- clean
85+
- rmdir
86+
- find
87+
- find duplicate
88+
- replace
89+
Url:
90+
homepage: https://webpath.iche2.com/app/fileshows/download_en.html
91+
bugtracker: https://github.com/huanguan1978/ft/issues
92+
help: https://webpath.iche2.com/fssdoc/en/
93+
Icon:
94+
stock: com.iche2.fileshows
95+
Launchable:
96+
desktop-id:
97+
- com.iche2.fileshows.desktop
98+
Provides:
99+
binaries:
100+
- fileshows
101+
Screenshots:
102+
- default: true
103+
caption:
104+
C: Intuitive Interface, Rapid File/Directory Discovery.
105+
thumbnails: []
106+
source-image:
107+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/home-default.png
108+
lang: C
109+
- caption:
110+
C: 'Granular Filtering: Supporting Glob Path Matching, Stat Attributes, and Custom Output.'
111+
thumbnails: []
112+
source-image:
113+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/prefs-filter.png
114+
lang: C
115+
- caption:
116+
C: '[Feature Example] Smart Matching in Action: Picture File Search with Real-time CLI Echo.'
117+
thumbnails: []
118+
source-image:
119+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/home-list-pictures.png
120+
lang: C
121+
- caption:
122+
C: CLI Integration Example] GUI-Configured Parameters Directly Executable via Command Line.
123+
thumbnails: []
124+
source-image:
125+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/cli-list-pictures.png
126+
lang: C
127+
- caption:
128+
C: 'Comprehensive Built-in Commands: Drag-and-Drop for One-Click File Management.'
129+
thumbnails: []
130+
source-image:
131+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/shortcut-default.png
132+
lang: C
133+
- caption:
134+
C: 'Flexible Output Paths: Custom Directory Specification for Incremental Mirroring, Archiving, and Unarchiving.'
135+
thumbnails: []
136+
source-image:
137+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/prefs-target-to.png
138+
lang: C
139+
- caption:
140+
C: '[Operation Example] Efficient File Archiving: Picture File Batch Archiving Demo, Parameters Clearly Visible.'
141+
thumbnails: []
142+
source-image:
143+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/shortcut-archive-runnow.png
144+
lang: C
145+
- caption:
146+
C: 'Programmable File Streams: Custom Scripting for Pattern-Based Task Orchestration.'
147+
thumbnails: []
148+
source-image:
149+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/prefs-scheduler-cust.png
150+
lang: C
151+
- caption:
152+
C: 'Automated Task Scheduling: CRON-Compatible Execution of Configured Scripts.'
153+
thumbnails: []
154+
source-image:
155+
url: https://webpath.iche2.com/screenshots/fileshows/linux/en/crontab-customize.png
156+
lang: C
157+
Releases:
158+
- version: 1.0.0
159+
unix-timestamp: 1762819200
160+
description:
161+
C: >-
162+
<ul>
163+
<li>the first cross-platform release</li>
164+
</ul>
165+
ContentRating:
166+
oars-1.0: {}
167+
---

0 commit comments

Comments
 (0)