diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..2d7aa60 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,16 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/recommended", + "plugin:import/electron", + "plugin:import/typescript" + ], + "parser": "@typescript-eslint/parser" +} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index d244fb5..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -ko_fi: streamwall diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 0d0fa55..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,18 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file - -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 25 - - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 25 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..4d2afe2 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,34 @@ +permissions: + contents: write + +on: + workflow_dispatch: + +jobs: + build: + strategy: + matrix: + os: + [ + { name: 'linux', image: 'ubuntu-latest' }, + { name: 'windows', image: 'windows-latest' }, + { name: 'macos', image: 'macos-latest' }, + ] + + runs-on: ${{ matrix.os.image }} + + steps: + - name: Github checkout + uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - run: npm ci + + - name: Publish app + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + run: npm run publish \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 4500fc3..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: test - -on: - pull_request: - push: - -permissions: - contents: read - actions: read - checks: write - -jobs: - jest-coverage: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 18.x - cache: 'npm' - - - name: Install Dependencies - run: npm install - - - name: Run Tests - run: npm run test:ci - env: - CI: true - - - name: Test Report - uses: dorny/test-reporter@v1 - if: success() || failure() # run this step even if previous step failed - with: - name: Jest Tests # Name of the check run which will be created - path: junit*.xml # Path to test results - reporter: jest-junit # Format of test results diff --git a/.gitignore b/.gitignore index 00eb3f2..b512c09 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1 @@ -# Entire directories -coverage -dist -node_modules -reports - -# Individual files -junit.xml \ No newline at end of file +node_modules \ No newline at end of file diff --git a/LICENSE b/LICENSE index 8a68e43..745a532 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2020 Max Goodhart +Copyright 2025 Max Goodhart Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/README.md b/README.md index 9d2c26d..fe053a0 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,22 @@ # Streamwall -:construction: Early WIP release! :construction: +:construction: Streamwall v2.0 is a work-in-progress :construction: + +Goals for the v2 branch: + +- TypeScript +- Use Electron Forge to distribute packaged releases +- Split out control server; refactor for local-only use without a webserver + +--- Streamwall makes it easy to compose multiple livestreams into a mosaic, with source attributions and audio control. -![Screenshot of Streamwall displaying a grid of streams](screenshot.png) ## How it works Under the hood, think of Streamwall as a specialized web browser for mosaicing video streams. It uses [Electron](https://www.electronjs.org) to create a grid of web browser views, loading the specified webpages into them. Once the page loads, Streamwall finds the `