Skip to content

Translated using Weblate (Swedish) #7

Translated using Weblate (Swedish)

Translated using Weblate (Swedish) #7

Workflow file for this run

# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Build
on:
push:
branches: [ master, development, '**-RC' ]
workflow_dispatch:
permissions: {}
jobs:
build:
# As this action runs on every push to the default branch and uses quite a lot of resources (both minutes and caches),
# only run it in the FreeTubeApp/FreeTube repository to avoid unnecessary GitHub Actions usage/billing in forks.
# Still allow manually triggering the workflow.
# If a fork does need this workflow to run on every push to the default branch, they can change this condition in their fork to include their repository.
if: github.repository == 'FreeTubeApp/FreeTube' || github.event_name == 'workflow_dispatch'
permissions:
actions: write
contents: read
strategy:
matrix:
node-version: [24.x]
runtime:
- linux-x64
- linux-armv7l
- linux-arm64
- win-x64
- win-arm64
- osx-x64
- osx-arm64
include:
- runtime: linux-x64
os: ubuntu-latest
- runtime: linux-armv7l
os: ubuntu-latest
- runtime: linux-arm64
os: ubuntu-latest
- runtime: osx-x64
os: macOS-latest
- runtime: osx-arm64
os: macOS-latest
- runtime: win-x64
os: windows-latest
- runtime: win-arm64
os: windows-latest
runs-on: ${{ matrix.os }}
steps:
- name: 'Use faster D: drive for yarn cache on Windows'
if: startsWith(matrix.os, 'windows')
shell: cmd
run: yarn config set cache-folder D:\ft_yarn_cache
- name: Get yarn cache directory
id: cache_dir
shell: bash
run: |
{
echo 'cache_dir<<EOF'
yarn cache dir
echo EOF
} >> "$GITHUB_OUTPUT"
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
with:
persist-credentials: false
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0
with:
node-version: ${{ matrix.node-version }}
package-manager-cache: false
- name: Restore yarn cache
id: restore_cache
uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 #v5.0.3
with:
key: ${{ format('node-cache-{0}-{1}-yarn-{2}', runner.os, runner.arch, hashFiles('yarn.lock')) }}
path: ${{ steps.cache_dir.outputs.cache_dir }}
- run: yarn run ci
shell: bash
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
- run: yarn run lint
shell: bash
- name: Set version number
id: versionNumber
shell: bash
run: |
original_version="$(jq -r '.version' package.json)"
version="$original_version"
lower_case_ref="$(echo -E "$GITHUB_REF" | tr '[:upper:]' '[:lower:]')"
if [[ "$lower_case_ref" == *development* ]]; then
version="${original_version}-nightly-${GITHUB_RUN_NUMBER}"
elif [[ "$lower_case_ref" == *rc* ]]; then
version="${original_version}-RC-${GITHUB_RUN_NUMBER}"
fi
package_json="$(jq --arg version "$version" '.version = $version' package.json)"
echo -E "$package_json" > package.json
echo "version=${version}" >> "$GITHUB_OUTPUT"
- name: Install libarchive-tools
if: startsWith(matrix.os, 'ubuntu')
shell: bash
run: |
sudo apt update
sudo apt -y install libarchive-tools
- name: Build x64 with Node.js ${{ matrix.node-version}}
if: contains(matrix.runtime, 'x64')
shell: bash
run: yarn run build
- name: Build ARMv7l with Node.js ${{ matrix.node-version}}
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
shell: bash
run: yarn run build:arm32
- name: Build ARM64 with Node.js ${{ matrix.node-version}}
if: contains(matrix.runtime, 'arm64')
shell: bash
run: yarn run build:arm64
- name: Convert X64 AppImage to static runtime
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
shell: bash
env:
VERSION: ${{ steps.versionNumber.outputs.version }}
run: |
sudo apt install desktop-file-utils
cd build
appimage="FreeTube-${VERSION}.AppImage"
wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -O ./appimagetool.AppImage
chmod +x ./"$appimage" ./appimagetool.AppImage
./"$appimage" --appimage-extract && rm -f ./"$appimage"
./appimagetool.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 20 \
-n ./squashfs-root ./"$appimage"
rm -rf ./squashfs-root ./appimagetool.AppImage
- name: Upload Linux .zip x64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-linux-x64-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.version }}.zip
- name: Upload Linux .7z x64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-linux-x64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.version }}.7z
- name: Upload Linux .zip ARMv7l Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-linux-armv7l-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.version }}-armv7l.zip
- name: Upload Linux .7z ARMv7l Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-linux-armv7l-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.version }}-armv7l.7z
- name: Upload Linux .zip ARM64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-linux-arm64-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.version }}-arm64.zip
- name: Upload Linux .7z ARM64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-linux-arm64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.version }}-arm64.7z
- name: Upload .deb x64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.version }}_amd64.deb
path: build/freetube_${{ steps.versionNumber.outputs.version }}_amd64.deb
- name: Upload .deb ARMv7l Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube_${{ steps.versionNumber.outputs.version }}_armv7l.deb
path: build/freetube_${{ steps.versionNumber.outputs.version }}_armv7l.deb
- name: Upload .deb ARM64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube_${{ steps.versionNumber.outputs.version }}_arm64.deb
path: build/freetube_${{ steps.versionNumber.outputs.version }}_arm64.deb
- name: Upload AppImage x64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-amd64.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.version }}.AppImage
- name: Upload AppImage ARMv7l Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-armv7l.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.version }}-armv7l.AppImage
- name: Upload AppImage ARM64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-arm64.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.version }}-arm64.AppImage
- name: Upload .rpm x64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}.amd64.rpm
path: build/freetube-${{ steps.versionNumber.outputs.version }}.x86_64.rpm
# rpm are not built for armv7l
- name: Upload .rpm ARM64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}.arm64.rpm
path: build/freetube-${{ steps.versionNumber.outputs.version }}.aarch64.rpm
- name: Upload Pacman .pacman x64 Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-amd64.pacman
path: build/freetube-${{ steps.versionNumber.outputs.version }}.pacman
- name: Upload Windows x64 .exe Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-setup-x64.exe
path: build/freetube Setup ${{ steps.versionNumber.outputs.version }}.exe
- name: Upload Windows x64 Portable Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-win-x64-portable.exe
path: build/freetube ${{ steps.versionNumber.outputs.version }}.exe
- name: Upload Windows x64 .zip Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-win-x64-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.version }}-win.zip
- name: Upload Windows x64 .7z Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-win-x64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.version }}-win.7z
- name: Upload Windows arm64 .exe Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-setup-arm64.exe
path: build/freetube Setup ${{ steps.versionNumber.outputs.version }}.exe
- name: Upload Windows arm64 Portable Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-win-arm64-portable.exe
path: build/freetube ${{ steps.versionNumber.outputs.version }}.exe
- name: Upload Windows arm64 .zip Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-win-arm64-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.version }}-arm64-win.zip
- name: Upload Windows arm64 .7z Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-win-arm64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.version }}-arm64-win.7z
- name: Upload Mac x64 .dmg Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-mac-x64.dmg
path: build/freetube-${{ steps.versionNumber.outputs.version }}.dmg
- name: Upload Mac x64 .zip Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-mac-x64.zip
path: build/freetube-${{ steps.versionNumber.outputs.version }}-mac.zip
- name: Upload Mac x64 .7z Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-mac-x64.7z
path: build/freetube-${{ steps.versionNumber.outputs.version }}-mac.7z
- name: Upload Mac arm64 .dmg Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-mac-arm64.dmg
path: build/freetube-${{ steps.versionNumber.outputs.version }}-arm64.dmg
- name: Upload Mac arm64 .zip Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-mac-arm64.zip
path: build/freetube-${{ steps.versionNumber.outputs.version }}-arm64-mac.zip
- name: Upload Mac arm64 .7z Artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.version }}-mac-arm64.7z
path: build/freetube-${{ steps.versionNumber.outputs.version }}-arm64-mac.7z
- name: Save yarn cache
uses: actions/cache/save@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 #v5.0.3
# Only save the cache if we weren't able to restore an existing one above
if: steps.restore_cache.outputs.cache-primary-key != steps.restore_cache.outputs.cache-matched-key
with:
key: ${{ steps.restore_cache.outputs.cache-primary-key }}
path: ${{ steps.cache_dir.outputs.cache_dir }}