forked from cloudron-apps/peertube-app
Compare commits
24 commits
Author | SHA1 | Date | |
---|---|---|---|
Rafael Caricio | 616ae32168 | ||
5da1da9700 | |||
7a7cea05f9 | |||
9ab0ca8cf5 | |||
8225196f43 | |||
fdbbf83b52 | |||
b5ea4a34aa | |||
83dffb7e82 | |||
afae3cc99e | |||
73d4a02c4a | |||
e86ace516f | |||
8543ac28e0 | |||
a2eba07155 | |||
171606daa4 | |||
7dc76ff44d | |||
205a2721dd | |||
bd5bd4edc4 | |||
8087c7f461 | |||
3df343c185 | |||
519a2a2628 | |||
863c687e68 | |||
fe514b48af | |||
ab8e5cfba8 | |||
9ea3b065ef |
|
@ -157,3 +157,90 @@
|
|||
[2.7.0]
|
||||
* Update PeerTube to 4.2.0
|
||||
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.2.0)
|
||||
|
||||
[2.7.1]
|
||||
* Update PeerTube to 4.2.1
|
||||
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.2.1)
|
||||
* Fix live ending job that breaks new live session
|
||||
* Fix search filters counter
|
||||
* Fix upload banner icon margin
|
||||
* Fix button icon margin
|
||||
* Fix my import expander icon that should only be displayed on import error
|
||||
* Fix select components styling inconsistency
|
||||
* Increase max watch section to avoid too much warnings in server
|
||||
* Optimize broadcast job creation
|
||||
* Optimize View activities delivery using a dedicated broadcast job queue that can be run in parallel
|
||||
* Fix video selection buttons placement
|
||||
* Fix searching into account blocklist
|
||||
* Fix incorrect instance stats
|
||||
* Fix broken player on ICE error
|
||||
* Relax views federation
|
||||
* Fix peertube user in docker
|
||||
* Fix playlist element federation with a deleted video
|
||||
|
||||
[2.7.2]
|
||||
* Update PeerTube to 4.2.2
|
||||
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.2.2)
|
||||
* Upgrade vulnerable server dependencies
|
||||
* Fix fast restream in permanent live
|
||||
* Fix latency mode setting when creating a live
|
||||
* Fix unique constraint tag violation when importing videos
|
||||
* Fix latest live sessions order
|
||||
* Fix server crash feed when accessing feeds that contains a live
|
||||
* Fix false boolean attribute (data-is-live etc) in custom markup
|
||||
|
||||
[2.8.0]
|
||||
* Update PeerTube to 4.3.0
|
||||
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.3.0)
|
||||
* Use yt-dlp by default instead of youtube-dl for new installations (because of much more dev activity)
|
||||
* Reduce amount of PeerTube error logs
|
||||
* Introduce log.log_tracker_unknown_infohash setting to disable "Unknown infoHash" warnings
|
||||
* Web browsers send their error logs to the server that writes them in its own logs. Can be disabled by log.accept_client_log setting
|
||||
* Enable metrics export using a Prometheus exporter
|
||||
* Enable tracing export using a Jaeger exporter
|
||||
* Automatically rebuild native plugin modules on NodeJS ABI change
|
||||
|
||||
[2.8.1]
|
||||
* Update PeerTube to 4.3.1
|
||||
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.3.1)
|
||||
* Prevent XSS in sort select on pages that list videos. Thanks to Anthony Roth who reported the vulnerability!
|
||||
* Fix broken embed player on live reload
|
||||
* Fix channel follow when manually approve instance followers is enabled
|
||||
* Fix input with number overflow on small screen
|
||||
* Fix moderation dropdown overflow on mobile
|
||||
|
||||
[2.9.0]
|
||||
* Update PeerTube to 5.0.0
|
||||
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v5.0.0)
|
||||
* Support object storage for live streams tada
|
||||
* Support Two Factor authentication (OTP) tada
|
||||
* Add explanation on disk space used for user quota admin config #5305
|
||||
* Display channel in my videos list
|
||||
* Show which playlists videos are added to in my videos list
|
||||
* Add Channels link in left menu
|
||||
* Add ... after the truncated video name in miniature
|
||||
* Add object storage info badge in videos admin overview
|
||||
* Add links to video files in videos admin overview
|
||||
* Better indicate the live ended in embed by displaying a message and the live preview
|
||||
* Force live autoplay by muting the video if necessary when the user was waiting for the live
|
||||
* Handle network issues in video player #5138
|
||||
* Cache chunks to upload in server to resume upload later #5224
|
||||
* Add ability to serve custom static files under /.well-known URL path #5214
|
||||
* Use account/channel avatar in account/channel RSS feeds #5325
|
||||
* Add filter to sort videos by name #5351
|
||||
* Add ability to configure OpenTelemetry Prometheus exporter listening hostname
|
||||
|
||||
[2.10.0]
|
||||
* Update base image to 4.0.0
|
||||
|
||||
[2.10.1]
|
||||
* Update PeerTube to 5.0.1
|
||||
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v5.0.1)
|
||||
* Fix HLS player infinite loading when the live stream/video ends
|
||||
* Do not autoplay live without autoplay setting
|
||||
* Fix private/internal video playback from Cloudflare object storage
|
||||
* Fix local channel stats/OpenTelemetry metric
|
||||
* Also display dropdown for videos from the homepage
|
||||
* Fix broken P2P with live stream coming from object storage
|
||||
* Fix responsive of table pagination
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"version": "2.7.0",
|
||||
"upstreamVersion": "4.2.0",
|
||||
"version": "2.10.1-1",
|
||||
"upstreamVersion": "5.0.1",
|
||||
"id": "org.joinpeertube.cloudronapp",
|
||||
"title": "PeerTube",
|
||||
"author": "PeerTube developers",
|
||||
|
@ -17,13 +17,19 @@
|
|||
"description": "RTMP Port for livestreaming",
|
||||
"defaultValue": 1935,
|
||||
"containerPort": 1935
|
||||
},
|
||||
"METRICS_PORT": {
|
||||
"title": "Prometheus Metrics Port",
|
||||
"description": "HTTP Port for Prometheus metrics",
|
||||
"defaultValue": 9091,
|
||||
"containerPort": 9091
|
||||
}
|
||||
},
|
||||
"addons": {
|
||||
"localstorage": {},
|
||||
"postgresql": {},
|
||||
"redis": {},
|
||||
"sendmail": {},
|
||||
"sendmail": { "supportsDisplayName": false },
|
||||
"ldap": {}
|
||||
},
|
||||
"memoryLimit": 536870912,
|
||||
|
@ -35,10 +41,10 @@
|
|||
"https://screenshots.cloudron.io/org.joinpeertube.cloudronapp/home.png",
|
||||
"https://screenshots.cloudron.io/org.joinpeertube.cloudronapp/subscribe.png"
|
||||
],
|
||||
"changelog": "file://CHANGELOG",
|
||||
"changelog": "file://CHANGELOG.md",
|
||||
"postInstallMessage": "file://POSTINSTALL.md",
|
||||
"documentationUrl": "https://docs.cloudron.io/apps/peertube/",
|
||||
"minBoxVersion": "7.1.0",
|
||||
"minBoxVersion": "7.2.0",
|
||||
"manifestVersion": 2
|
||||
}
|
||||
|
||||
|
|
17
Dockerfile
17
Dockerfile
|
@ -1,16 +1,17 @@
|
|||
FROM cloudron/base:3.2.0@sha256:ba1d566164a67c266782545ea9809dc611c4152e27686fd14060332dd88263ea
|
||||
FROM cloudron/base:4.0.0@sha256:31b195ed0662bdb06a6e8a5ddbedb6f191ce92e8bee04c03fb02dd4e9d0286df
|
||||
|
||||
RUN mkdir -p /app/code/server /app/pkg
|
||||
WORKDIR /app/code/server
|
||||
|
||||
# we require ffmpeg 4.4.1 - https://github.com/Chocobozzz/PeerTube/releases/tag/v4.0.0
|
||||
# https://lindevs.com/install-ffmpeg-on-ubuntu/
|
||||
RUN apt update && \
|
||||
add-apt-repository -y ppa:savoury1/ffmpeg4 && \
|
||||
apt install -y ffmpeg prosody && \
|
||||
rm -rf /var/cache/apt /var/lib/apt/lists
|
||||
# https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/dependencies.md
|
||||
ARG NODEJS_VERSION=16.13.2
|
||||
RUN mkdir -p /usr/local/node-${NODEJS_VERSION} && \
|
||||
curl -L https://nodejs.org/dist/v${NODEJS_VERSION}/node-v${NODEJS_VERSION}-linux-x64.tar.gz | tar zxf - --strip-components 1 -C /usr/local/node-${NODEJS_VERSION}
|
||||
ENV PATH /usr/local/node-${NODEJS_VERSION}/bin:$PATH
|
||||
|
||||
ARG VERSION=4.2.0
|
||||
RUN apt update && apt install -y prosody && rm -rf /var/cache/apt /var/lib/apt/lists
|
||||
|
||||
ARG VERSION=5.0.1
|
||||
|
||||
# install peertube. the chown is required for some reason for ffmpeg. it fails with EROFS without it when transcoding
|
||||
RUN curl -sL https://github.com/Chocobozzz/PeerTube/releases/download/v${VERSION}/peertube-v${VERSION}.tar.xz | tar --strip-components 1 -Jxvf - && \
|
||||
|
|
17
start.sh
17
start.sh
|
@ -17,7 +17,6 @@ update_ldap() {
|
|||
first_time_setup() {
|
||||
echo "==> Starting peertube to run migrations on first run"
|
||||
npm start & # be wary of https://stackoverflow.com/questions/70738567/why-does-running-npm-run-script-as-root-switch-user
|
||||
peertube_pid=$!
|
||||
sleep 10
|
||||
|
||||
while ! curl --silent --output /dev/null --fail http://localhost:9000/; do
|
||||
|
@ -25,7 +24,8 @@ first_time_setup() {
|
|||
sleep 5
|
||||
done
|
||||
|
||||
kill -SIGTERM ${peertube_pid} # this kills the process group
|
||||
killall -SIGTERM peertube # this kills the process group
|
||||
sleep 5
|
||||
|
||||
echo "==> Reset root password"
|
||||
echo "changeme" | npm run reset-password -- -u root
|
||||
|
@ -41,6 +41,11 @@ first_time_setup() {
|
|||
update_config() {
|
||||
echo "==> Ensure and updating configs"
|
||||
|
||||
# version 5 needs this now
|
||||
if [[ `yq eval '.secrets | has("peertube")' /app/data/production.yaml` != "true" ]]; then
|
||||
yq eval ".secrets.peertube = \"`openssl rand -hex 32`\"" -i /app/data/production.yaml
|
||||
fi
|
||||
|
||||
yq eval ".webserver.hostname = \"${CLOUDRON_APP_DOMAIN}\"" -i /app/data/production.yaml
|
||||
|
||||
# database
|
||||
|
@ -65,7 +70,9 @@ update_config() {
|
|||
yq eval ".smtp.disable_starttls = true" -i /app/data/production.yaml
|
||||
yq eval ".smtp.from_address = \"${CLOUDRON_MAIL_FROM}\"" -i /app/data/production.yaml
|
||||
|
||||
# ensure settings which were later added
|
||||
yq eval ".storage.bin = \"/app/data/storage/bin/\"" -i /app/data/production.yaml
|
||||
yq eval ".storage.well_known = \"/app/data/storage/well_known/\"" -i /app/data/production.yaml
|
||||
}
|
||||
|
||||
# cd /var/www/peertube/peertube-latest/scripts && sudo -H -u peertube ./upgrade.sh
|
||||
|
@ -79,10 +86,12 @@ else
|
|||
update_config
|
||||
|
||||
[[ -n "${CLOUDRON_LDAP_SERVER:-}" ]] && update_ldap
|
||||
|
||||
(sleep 30; echo "==> Generating avatar miniatures"; gosu cloudron:cloudron node dist/scripts/migrations/peertube-4.2.js) &
|
||||
fi
|
||||
|
||||
# REMOVE THIS ON NEXT RELEASE
|
||||
echo "=> Run migration script for v5.0"
|
||||
node ./dist/scripts/migrations/peertube-5.0.js
|
||||
|
||||
chown -R cloudron:cloudron /app/data /run/peertube
|
||||
|
||||
echo "==> Starting PeerTube"
|
||||
|
|
906
test/package-lock.json
generated
906
test/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -10,11 +10,10 @@
|
|||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"expect.js": "^0.3.1",
|
||||
"mocha": "^10.0.0"
|
||||
"mocha": "^10.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"chromedriver": "^102.0.0",
|
||||
"selenium-server-standalone-jar": "^3.141.59",
|
||||
"selenium-webdriver": "^4.2.0"
|
||||
"chromedriver": "^108.0.0",
|
||||
"selenium-webdriver": "^4.7.1"
|
||||
}
|
||||
}
|
||||
|
|
36
test/test.js
36
test/test.js
|
@ -89,19 +89,12 @@ describe('Application life cycle test', function () {
|
|||
async function completeSetup() {
|
||||
var button;
|
||||
|
||||
await browser.get('https://' + app.fqdn + '/admin/config/edit-custom');
|
||||
await browser.get(`https://${app.fqdn}`);
|
||||
await waitForElement(By.xpath('//a[contains(text(), "Configure my instance")]'));
|
||||
await browser.findElement(By.xpath('//a[contains(text(), "Configure my instance")]')).click(); // this opens a new window
|
||||
|
||||
await browser.get('https://' + app.fqdn + '/admin/config/edit-custom');
|
||||
await waitForElement(By.xpath('//input[contains(@value, "Update configuration")]'));
|
||||
button = await browser.findElement(By.xpath('//input[contains(@value, "Update configuration")]'));
|
||||
await browser.executeScript('arguments[0].scrollIntoView(true)', button);
|
||||
await button.click();
|
||||
await waitForElement(By.xpath('//h3[contains(text(), "Success")]'));
|
||||
|
||||
console.log('Close the newly opened tab. Will wait for 20 seconds');
|
||||
await browser.sleep(20000);
|
||||
console.log('Close the newly opened tab. Will wait for 10 seconds');
|
||||
await browser.sleep(10000);
|
||||
}
|
||||
|
||||
async function uploadVideo() {
|
||||
|
@ -109,8 +102,12 @@ describe('Application life cycle test', function () {
|
|||
await browser.sleep(2000);
|
||||
await browser.findElement(By.xpath('//input[@id="videofile" and @type="file"]')).sendKeys(path.resolve(__dirname, './Cloudron Test Video.mp4'));
|
||||
await browser.sleep(10000); // wait for upload
|
||||
|
||||
await waitForElement(By.xpath('//div[@class="submit-container"]//span[text()="Publish"]'));
|
||||
await browser.findElement(By.xpath('//div[@class="submit-container"]//span[text()="Publish"]')).click();
|
||||
let button = browser.findElement(By.xpath('//div[@class="submit-container"]//span[text()="Publish"]'));
|
||||
await browser.executeScript('arguments[0].scrollIntoView(false)', button);
|
||||
await browser.sleep(2000);
|
||||
await button.click();
|
||||
await browser.sleep(2000);
|
||||
}
|
||||
|
||||
|
@ -122,7 +119,7 @@ describe('Application life cycle test', function () {
|
|||
xit('build app', function () { execSync('cloudron build', EXEC_ARGS); });
|
||||
it('install app', async function () {
|
||||
execSync('cloudron install --location ' + LOCATION, EXEC_ARGS);
|
||||
await sleep(10000); // takes a bit to create root user in background
|
||||
await sleep(40000); // takes a bit to create root user in background
|
||||
});
|
||||
|
||||
it('can get app information', getAppInfo);
|
||||
|
@ -174,7 +171,10 @@ describe('Application life cycle test', function () {
|
|||
it('can login', login.bind(null, username, password));
|
||||
it('logout', logout);
|
||||
|
||||
it('uninstall app', function () { execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS); });
|
||||
it('uninstall app', async function () {
|
||||
await browser.executeScript('localStorage.clear();');
|
||||
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
|
||||
});
|
||||
|
||||
// No SSO
|
||||
it('install app (no sso)', async function () {
|
||||
|
@ -188,7 +188,10 @@ describe('Application life cycle test', function () {
|
|||
it('can complete setup', completeSetup);
|
||||
it('can logout', logout);
|
||||
|
||||
it('uninstall app (no sso)', function () { execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS); });
|
||||
it('uninstall app (no sso)', async function () {
|
||||
await browser.executeScript('localStorage.clear();');
|
||||
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
|
||||
});
|
||||
|
||||
// test update
|
||||
it('can install app', async function () {
|
||||
|
@ -210,5 +213,8 @@ describe('Application life cycle test', function () {
|
|||
it('can login', login.bind(null, username, password));
|
||||
it('logout', logout);
|
||||
|
||||
it('uninstall app', function () { execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS); });
|
||||
it('uninstall app', async function () {
|
||||
await browser.executeScript('localStorage.clear();');
|
||||
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue