Calendaring app for shift-workers to enter their uneven work schedule more easily
Find a file
2022-08-14 15:14:14 -04:00
assets npm update, remove runtime.exs as not using for now 2022-08-14 13:58:41 -04:00
config npm update, remove runtime.exs as not using for now 2022-08-14 13:58:41 -04:00
lib don't gzip static files, and always commit them 2022-08-14 15:09:30 -04:00
priv don't gzip static files, and always commit them 2022-08-14 15:09:30 -04:00
test updated Bamboo references to Swoosh; added runtime.exs config file 2022-08-13 06:39:14 -04:00
.formatter.exs Create phoenix project 2020-09-12 19:47:24 -03:00
.gitignore don't gzip static files, and always commit them 2022-08-14 15:09:30 -04:00
.iex.exs month & shift navigation progress 2021-03-15 15:46:59 -04:00
Dockerfile added Dockerfile and entrypoint script 2022-08-14 15:14:14 -04:00
entrypoint.sh added Dockerfile and entrypoint script 2022-08-14 15:14:14 -04:00
mix.exs updated deps & switched from Mix.Config to Config 2022-08-13 06:19:56 -04:00
mix.lock updated deps & switched from Mix.Config to Config 2022-08-13 06:19:56 -04:00
README.md don't gzip static files, and always commit them 2022-08-14 15:09:30 -04:00

Shift73k

Calendaring app for shift-worker shift tracking, with support for CSV export and sharing work schedule with others.

Written in Elixir & Phoenix LiveView, with Bootstrap v5.

TODO

  • Proper modal to delete shifts? [2022-08-14]
  • move runtime config out of compile-time config files, to move towards supporting releases
    • probably need to use def get_app_config style functions instead of @module_var module variables, (see this)
  • Update tests, which are probably all way out of date. But I also don't care that much for this project...

Deploying

I'm using a dumb & simple docker approach to deploying this now. Nothing automated, the basic steps are:

  1. ensure latest assets are built, digested, and committed to the repo

    # rebuild static assets:
    rm -rf ./priv/static/*
    npm --prefix assets run build
    MIX_ENV=prod mix phx.digest
    # then do a new commit and push...
    
  2. on server, build a new container, and run it

Simple dockerfile

# ./Dockerfile

# Extend from the official Elixir image
FROM elixir:1.13.4-otp-25-alpine

# # install the package postgresql-client to run pg_isready within entrypoint script
# RUN apt-get update && \
#   apt-get install -y postgresql-client

# Copy the entrypoint script
COPY ./entrypoint.sh /entrypoint.sh

# Create app directory and copy the Elixir projects into it
RUN mkdir /app
COPY ./app /app
WORKDIR /app

# Install the build tools we'll need
RUN apk update && \
  apk upgrade --no-cache && \
  apk add --no-cache \
    build-base && \
  mix local.rebar --force && \
  mix local.hex --force


# The environment to build with
ENV MIX_ENV=prod

# Get deps and compile
RUN mix do deps.get, deps.compile, compile

# Start command
CMD = ["/entrypoint.sh"]

Simple entrypoint script

#!/bin/ash

export MIX_ENV="prod"

cd /app
exec mix ecto.migrate && mix phx.server