The entire codebase is written in TypeScript, and common types are defined in types/moviematch.ts.
To get started, you'll need to have these dependencies installed:
MovieMatch tries to follow Golang's unofficial project layout.
.
├── .github
│ └── workflows # GitHub Actions config
├── cmd
│ └── moviematch # The entrypoint into the application
├── configs
│ └── localization
├── docs
├── internal
│ └── app # Back-end Deno code
│ ├── moviematch
│ └── plex
├── screenshots
├── scripts # Scripts for starting, bundling, and testing the entire codebase.
├── types # Shared application-level types
└── web # Front-end code
├── app
│ ├── src
│ ├── static
│ └── types
├── design
└── template
MovieMatch uses GitHub Actions.
There is a workflow that runs the test suite (scripts/test.sh) for every commit.
- Ensure that the
VERSIONfile reflects the version that is to be released - Finalise the
RELEASE_NOTESfor the release - Trigger a new release with Run workflow, entering the version to be released.
The workflow will automatically create a GitHub release and publish a Docker image.
Deno provides a compile sub-command that creates a standalone binary for a given platform. This is the way MovieMatch is distributed.
The end-to-end process is:
- The front-end is compiled using Snowpack (output is in
web/app/build/dist) - The
pkgerhelper command bundles the web app, along withVERSIONandconfigs/localizationintopkg.ts - The
pkgedimport is remapped frompkger.tstopkger_release.tsfor production, and all files imported withreadFile,readTextFile, etc. are imported from thepkg.tsimport. (Note, this is intended to be temporary until Import Assertions are suitable for adding binary or plain text files into the dependency graph) deno compilecreates a JavaScript bundle starting with thecmd/moviematch/main.tsentrypoint and outputs amoviematchbinary.