Skip to content

Commit cba58d5

Browse files
Support multiple users and/or configs #1067 #923 (#1228)
1 parent bbfe2ff commit cba58d5

31 files changed

+2165
-283
lines changed

.devcontainer/python/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"features": {
88
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
99
},
10-
"postCreateCommand": "sudo apt-get update && sudo apt-get install -y locales-all"
10+
"postCreateCommand": "sudo apt-get update && sudo apt-get install -y locales-all && (curl -fsSL https://claude.ai/install.sh | bash)"
1111

1212
// Features to add to the dev container. More info: https://containers.dev/features.
1313
// "features": {},

.dockerignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ cron_script.sh
1212
.coverage
1313
.coverage.*
1414
.git
15-
tests/
1615
.venv
1716
venv
18-
create/
17+
create/
18+
Dockerfile.test-py310
19+
.dockerignore.test
20+
check_py310_compat.py

.github/workflows/build-package.yml

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,6 @@ jobs:
291291
run: |
292292
mv dist/icloud dist/icloud-${{inputs.icloudpd_version}}-linux-${{ matrix.platform[1] }}
293293
mv dist/icloudpd dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.platform[1] }}
294-
mv dist/icloudpd_ex dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-${{ matrix.platform[1] }}
295294
296295
- name: Upload artifacts
297296
uses: actions/upload-artifact@v4
@@ -542,7 +541,6 @@ jobs:
542541
run: |
543542
mv dist/icloud dist/icloud-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.platform[1] }}
544543
mv dist/icloudpd dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.platform[1] }}
545-
mv dist/icloudpd_ex dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.platform[1] }}
546544
547545
- name: Upload artifacts
548546
uses: actions/upload-artifact@v4
@@ -583,10 +581,8 @@ jobs:
583581
run: |
584582
scripts/build_bin2 icloudpd icloud && \
585583
scripts/build_bin1 icloud && \
586-
scripts/build_bin1 icloudpd_ex && \
587584
mv dist/icloud dist/icloud-${{inputs.icloudpd_version}}-macos-amd64 && \
588-
mv dist/icloudpd dist/icloudpd-${{inputs.icloudpd_version}}-macos-amd64 && \
589-
mv dist/icloudpd_ex dist/icloudpd-ex-${{inputs.icloudpd_version}}-macos-amd64
585+
mv dist/icloudpd dist/icloudpd-${{inputs.icloudpd_version}}-macos-amd64
590586
591587
- name: Build Python Binary Wheel
592588
run: |
@@ -631,10 +627,8 @@ jobs:
631627
run: |
632628
scripts/build_bin2 icloudpd icloud && \
633629
scripts/build_bin1 icloud && \
634-
scripts/build_bin1 icloudpd_ex && \
635630
mv dist/icloud dist/icloud-${{inputs.icloudpd_version}}-windows-amd64 && \
636-
mv dist/icloudpd dist/icloudpd-${{inputs.icloudpd_version}}-windows-amd64 && \
637-
mv dist/icloudpd_ex dist/icloudpd-ex-${{inputs.icloudpd_version}}-windows-amd64
631+
mv dist/icloudpd dist/icloudpd-${{inputs.icloudpd_version}}-windows-amd64
638632
639633
- name: Build Python Binary Wheel
640634
run: |
@@ -1450,13 +1444,10 @@ jobs:
14501444
cd /work &&
14511445
chmod +x dist/icloud-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
14521446
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
1453-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
14541447
echo "test icloud..." &&
14551448
dist/icloud-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} --version &&
14561449
echo "test icloudpd..." &&
14571450
dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} --version &&
1458-
echo "test icloudpd-ex..." &&
1459-
dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} --version &&
14601451
touch /work/compatibility/bin.${{ matrix.image[0] }}.${{ matrix.prop[0] }}.pass
14611452
14621453
- name: Record failure for ${{ matrix.prop[2] }}${{ matrix.image[1] }} on ${{ matrix.prop[1] }}
@@ -1489,7 +1480,6 @@ jobs:
14891480
cd /work &&
14901481
chmod +x dist/icloud-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
14911482
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
1492-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
14931483
echo "test icloudpd..." &&
14941484
TZ=America/Los_Angeles LC_ALL=ru_RU.UTF-8 dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} --use-os-locale --version 1>.result &&
14951485
cat .result &&
@@ -1644,13 +1634,10 @@ jobs:
16441634
cd /work &&
16451635
chmod +x dist/icloud-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
16461636
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
1647-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
16481637
echo "test icloud..." &&
16491638
dist/icloud-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} --version &&
16501639
echo "test icloudpd..." &&
16511640
dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} --version &&
1652-
echo "test icloudpd-ex..." &&
1653-
dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} --version &&
16541641
touch /work/compatibility/bin-musl.${{ matrix.image[0] }}.${{ matrix.prop[0] }}.pass
16551642
16561643
- name: Record failure for ${{ matrix.prop[2] }}${{ matrix.image[1] }} on ${{ matrix.prop[1] }}
@@ -1683,7 +1670,6 @@ jobs:
16831670
cd /work &&
16841671
chmod +x dist/icloud-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
16851672
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
1686-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
16871673
echo "test icloudpd..." &&
16881674
TZ=America/Los_Angeles LC_ALL=ru_RU.UTF-8 dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} --use-os-locale --version 1>.result &&
16891675
cat .result &&
@@ -1835,13 +1821,10 @@ jobs:
18351821
cd /work &&
18361822
chmod +x dist/icloud-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
18371823
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
1838-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
18391824
echo "test icloud..." &&
18401825
dist/icloud-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} --version &&
18411826
echo "test icloudpd..." &&
18421827
dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} --version &&
1843-
echo "test icloudpd-ex..." &&
1844-
dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} --version &&
18451828
touch /work/compatibility/bin.${{ matrix.image[0] }}.${{ matrix.prop[0] }}.pass
18461829
18471830
- name: Record failure for ${{ matrix.prop[2] }}${{ matrix.image[1] }} on ${{ matrix.prop[1] }}
@@ -1875,7 +1858,6 @@ jobs:
18751858
cd /work &&
18761859
chmod +x dist/icloud-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
18771860
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
1878-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} &&
18791861
echo "test icloudpd..." &&
18801862
TZ=America/Los_Angeles LC_ALL=ru_RU.UTF-8 dist/icloudpd-${{inputs.icloudpd_version}}-linux-${{ matrix.prop[0] }} --use-os-locale --version 1>.result &&
18811863
cat .result &&
@@ -2027,13 +2009,10 @@ jobs:
20272009
cd /work &&
20282010
chmod +x dist/icloud-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
20292011
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
2030-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
20312012
echo "test icloud..." &&
20322013
dist/icloud-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} --version &&
20332014
echo "test icloudpd..." &&
20342015
dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} --version &&
2035-
echo "test icloudpd-ex..." &&
2036-
dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} --version &&
20372016
touch /work/compatibility/bin-musl.${{ matrix.image[0] }}.${{ matrix.prop[0] }}.pass
20382017
20392018
- name: Record failure for ${{ matrix.prop[2] }}${{ matrix.image[1] }} on ${{ matrix.prop[1] }}
@@ -2067,7 +2046,6 @@ jobs:
20672046
cd /work &&
20682047
chmod +x dist/icloud-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
20692048
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
2070-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} &&
20712049
echo "test icloudpd..." &&
20722050
TZ=America/Los_Angeles LC_ALL=ru_RU.UTF-8 dist/icloudpd-${{inputs.icloudpd_version}}-linux-musl-${{ matrix.prop[0] }} --use-os-locale --version 1>.result &&
20732051
cat .result &&
@@ -2129,13 +2107,10 @@ jobs:
21292107
echo "prep test..." &&
21302108
chmod +x dist/icloud-${{inputs.icloudpd_version}}-macos-amd64 &&
21312109
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-macos-amd64 &&
2132-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-macos-amd64 &&
21332110
echo "test icloud..." &&
21342111
dist/icloud-${{inputs.icloudpd_version}}-macos-amd64 --version &&
21352112
echo "test icloudpd..." &&
21362113
dist/icloudpd-${{inputs.icloudpd_version}}-macos-amd64 --version &&
2137-
echo "test icloudpd-ex..." &&
2138-
dist/icloudpd-ex-${{inputs.icloudpd_version}}-macos-amd64 --version &&
21392114
touch compatibility/bin.${{ matrix.prop[0] }}.${{ matrix.prop[1] }}.pass
21402115
21412116
- name: Record failure for ${{ matrix.prop[0] }} on amd64
@@ -2158,7 +2133,6 @@ jobs:
21582133
echo "prep test..." &&
21592134
chmod +x dist/icloud-${{inputs.icloudpd_version}}-macos-amd64 &&
21602135
chmod +x dist/icloudpd-${{inputs.icloudpd_version}}-macos-amd64 &&
2161-
chmod +x dist/icloudpd-ex-${{inputs.icloudpd_version}}-macos-amd64 &&
21622136
echo "test icloudpd..." &&
21632137
TZ=America/Los_Angeles LC_ALL=ru_RU.UTF-8 dist/icloudpd-${{inputs.icloudpd_version}}-macos-amd64 --use-os-locale --version 1>.result &&
21642138
cat .result &&
@@ -2216,8 +2190,7 @@ jobs:
22162190
dist/icloud-${{inputs.icloudpd_version}}-${{ matrix.prop[1] }}-amd64.exe --version &&
22172191
echo "test icloudpd..." &&
22182192
dist/icloudpd-${{inputs.icloudpd_version}}-${{ matrix.prop[1] }}-amd64.exe --version &&
2219-
echo "test icloudpd-ex..." &&
2220-
dist/icloudpd-ex-${{inputs.icloudpd_version}}-${{ matrix.prop[1] }}-amd64.exe --version &&
2193+
22212194
touch compatibility/bin.${{ matrix.prop[0] }}.amd64.pass
22222195

22232196
- name: Record failure for ${{ matrix.prop[0] }} on amd64

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,5 @@ node_modules/
2525
# used for local troubleshooting
2626
.photos
2727
.cookies/
28+
29+
.claude/

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Unreleased
44

5+
- feat: support multiple user configurations in single command [#1067](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/1067) [#923](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/923)
6+
57
## 1.31.0 (2025-08-20)
68

79
- fix: OOMing on large downloads [#1214](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/1214)

CONTRIBUTING.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ Building platform executables:
123123
``` sh
124124
scripts/build_bin2 icloudpd icloud
125125
scripts/build_bin1 icloud
126-
scripts/build_bin1 icloudpd_ex
127126
```
128127
Note: that command is for Linux, including devcontainers. Windows & macOS scripts must be executed on respective platforms.
129128

@@ -132,7 +131,6 @@ Building Linux static executables:
132131
``` sh
133132
scripts/build_static icloudpd
134133
scripts/build_static icloud
135-
scripts/build_static icloudpd_ex
136134
```
137135

138136
Building Python wheels (with executable):

Dockerfile

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,50 @@ FROM alpine:3.18 AS runtime_amd64_none
22
ENV MUSL_LOCPATH="/usr/share/i18n/locales/musl"
33
RUN apk update && apk add --no-cache tzdata musl-locales musl-locales-lang
44
WORKDIR /app
5-
COPY dist/icloudpd-ex-*.*.*-linux-musl-amd64 icloudpd_ex
5+
COPY dist/icloud-*.*.*-linux-musl-amd64 icloud
6+
COPY dist/icloudpd-*.*.*-linux-musl-amd64 icloudpd
67

78
FROM alpine:3.18 AS runtime_arm64_none
89
ENV MUSL_LOCPATH="/usr/share/i18n/locales/musl"
910
RUN apk update && apk add --no-cache tzdata musl-locales musl-locales-lang
1011
WORKDIR /app
11-
COPY dist/icloudpd-ex-*.*.*-linux-musl-arm64 icloudpd_ex
12+
COPY dist/icloud-*.*.*-linux-musl-arm64 icloud
13+
COPY dist/icloudpd-*.*.*-linux-musl-arm64 icloudpd
1214

1315
FROM alpine:3.18 AS runtime_arm_v7
1416
ENV MUSL_LOCPATH="/usr/share/i18n/locales/musl"
1517
RUN apk update && apk add --no-cache tzdata musl-locales musl-locales-lang
1618
WORKDIR /app
17-
COPY dist/icloudpd-ex-*.*.*-linux-musl-arm32v7 icloudpd_ex
19+
COPY dist/icloud-*.*.*-linux-musl-arm32v7 icloud
20+
COPY dist/icloudpd-*.*.*-linux-musl-arm32v7 icloudpd
1821

1922
FROM runtime_${TARGETARCH}_${TARGETVARIANT:-none} AS runtime
2023
ENV TZ=UTC
2124
EXPOSE 8080
2225
WORKDIR /app
23-
RUN chmod +x /app/icloudpd_ex
24-
ENTRYPOINT ["/app/icloudpd_ex"]
26+
RUN chmod +x /app/icloud /app/icloudpd
27+
28+
# Use a shell script to allow command selection
29+
COPY <<EOF /app/entrypoint.sh
30+
#!/bin/sh
31+
# If first argument is 'icloud' or 'icloudpd', run the corresponding binary
32+
case "\$1" in
33+
icloud)
34+
shift
35+
exec /app/icloud "\$@"
36+
;;
37+
icloudpd)
38+
shift
39+
exec /app/icloudpd "\$@"
40+
;;
41+
*)
42+
# Default to icloudpd
43+
exec /app/icloudpd "\$@"
44+
;;
45+
esac
46+
EOF
47+
48+
RUN chmod +x /app/entrypoint.sh
49+
50+
# Default entrypoint allows command selection
51+
ENTRYPOINT ["/app/entrypoint.sh"]

Dockerfile.build

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,8 @@ RUN \
7171
echo "Building binaries..." && \
7272
scripts/build_bin2 icloudpd icloud && \
7373
scripts/build_bin1 icloud && \
74-
scripts/build_bin1 icloudpd_ex && \
7574
scripts/build_static icloudpd && \
7675
scripts/build_static icloud && \
77-
scripts/build_static icloudpd_ex && \
7876
scripts/build_whl
7977

8078
FROM scratch

Dockerfile.build-musl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ RUN \
5050
. .venv/bin/activate && \
5151
scripts/build_bin2 icloudpd icloud && \
5252
scripts/build_bin1 icloud && \
53-
scripts/build_bin1 icloudpd_ex && \
5453
scripts/build_whl
5554

5655
FROM scratch

help_current.txt

Whitespace-only changes.

0 commit comments

Comments
 (0)