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
VERSION
file reflects the version that is to be released - Finalise the
RELEASE_NOTES
for 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
pkger
helper command bundles the web app, along withVERSION
andconfigs/localization
intopkg.ts
- The
pkged
import is remapped frompkger.ts
topkger_release.ts
for production, and all files imported withreadFile
,readTextFile
, etc. are imported from thepkg.ts
import. (Note, this is intended to be temporary until Import Assertions are suitable for adding binary or plain text files into the dependency graph) deno compile
creates a JavaScript bundle starting with thecmd/moviematch/main.ts
entrypoint and outputs amoviematch
binary.