invidious-experimenting/.github/workflows/ci.yml
2020-12-02 01:32:19 +01:00

74 lines
2.4 KiB
YAML

name: Invidious CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Crystal
uses: oprypin/install-crystal@v1.2.4
# - name: Cache dependencies
# uses: actions/cache@v2
# with:
# path: ./lib
# key: shards-${{ hashFiles('shard.lock') }} # shard.lock isn't tracked atm
# Docs at https://crystal-lang.org/reference/the_shards_command
#
# `shards install`
#
# Resolves and installs dependencies into the lib folder. If not already present, generates a shard.lock
# file from resolved dependencies, locking version numbers or Git commits.
# Reads and enforces locked versions and commits if a shard.lock file is present. The install command may
# fail if a locked version doesn't match a requirement, but may succeed if a new dependency was added, as
# long as it doesn't generate a conflict, thus generating a new shard.lock file.
#
# `shards update`
#
# Resolves and updates all dependencies into the lib folder again, whatever the locked versions and
# commits in the shard.lock file. Eventually generates a new shard.lock file.
#
# --------------------------------------------------------------------------------
#
# running either `shards install` or `shards update` without a `shard.lock` file does the same thing,
# downloading shards into the `lib` folder and writing a `shard.lock` file
#
# if there is a `shard.lock` file `shards install` installs the versions from the lock file while
# `shards update` does a `shards install` that pretends there isn't a lock file present
- name: Update and install shards
run: shards update
- name: Run tests
run: crystal spec
- name: Run lint
run: |
if ! crystal tool format --check; then
crystal tool format
git diff
exit 1
fi
- name: Build
run: crystal build --warnings all --error-on-warnings --error-trace src/invidious.cr
build-docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build Docker
run: docker-compose up -d
- name: Test Docker
run: while curl -Isf http://localhost:3000; do sleep 1; done