diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index eaeff693bc..283c2825e3 100755 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -161,7 +161,9 @@ jobs: - name: Build app run: | + ls -la data/current_flavour/config/flavour_assets/ && data/current_flavour/config/flavour_assets/hooks/ just rel-build + ls -la data/current_flavour/config/flavour_assets/ && data/current_flavour/config/flavour_assets/hooks/ cd _build/prod/rel && tar -czvf bonfire-${{ env.FLAVOUR }}-amd64-debian-bullseye.tar.gz bonfire - name: Release to github uses: softprops/action-gh-release@v2 diff --git a/flavours/classic/config/bonfire_ui.exs b/flavours/classic/config/bonfire_ui.exs index df24079c8e..a3f5ca9003 100755 --- a/flavours/classic/config/bonfire_ui.exs +++ b/flavours/classic/config/bonfire_ui.exs @@ -167,7 +167,7 @@ config :surface, :components, [ config :surface, :compiler, hooks_output_dir: "data/current_flavour/config/flavour_assets/hooks/", css_output_file: "data/current_flavour/config/flavour_assets/components.css", - variants_output_file: "assets/css/variants.js", + variants_output_file: "data/current_flavour/config/flavour_assets/variants.js", enable_variants: true # variants_prefix: "s-" diff --git a/justfile b/justfile index 2ee71242b4..3993a04162 100644 --- a/justfile +++ b/justfile @@ -76,34 +76,34 @@ config: # Initialise a specific flavour, with its env files, and create some required folders, files and softlinks @flavour select_flavour: echo "Switching to flavour '$select_flavour' in $MIX_ENV env..." - just pre-config $select_flavour - just pre-setup-env $select_flavour + just _pre-config $select_flavour + just _pre-setup-env $select_flavour printf "\nNow make sure to finish the flavour setup with 'just setup'. You can also edit your config for flavour '$select_flavour' in /.env and ./config/ more generally.\n" setup: {{ if MIX_ENV == "prod" { "just setup-prod" } else { "just setup-dev" } }} -init services="db": pre-init +init services="db": _pre-init @just services $services @echo "Light that fire! $APP_NAME with $FLAVOUR flavour in $MIX_ENV - docker:$WITH_DOCKER - $APP_VSN - $APP_BUILD - $FLAVOUR_PATH - {{os_family()}}/{{os()}} on {{arch()}}" @config-basic select_flavour=FLAVOUR: echo "Setting up flavour '$select_flavour' in $MIX_ENV env..." - just pre-config $select_flavour + just _pre-config $select_flavour just setup echo "Setup done." -@pre-config select_flavour=FLAVOUR: +@_pre-config select_flavour=FLAVOUR: rm -rf ./priv/repo/* -rm ./config/deps.flavour.* 2> /dev/null -rm ./config/flavour_* 2> /dev/null - just pre-setup $select_flavour + just _pre-setup $select_flavour -pre-setup flavour='classic': +@_pre-setup flavour='classic': mkdir -p config mkdir -p ./flavours/$flavour/config/prod/ mkdir -p ./flavours/$flavour/config/dev/ - just ln-spark-deps + just _ln-spark-deps cd config && ln -sfn ../flavours/classic/config/* ./ && ln -sfn ../flavours/$flavour/config/* ./ touch ./config/deps.path mkdir -p data @@ -114,19 +114,19 @@ pre-setup flavour='classic': mkdir -p forks/ chmod 700 .erlang.cookie -ln-spark-deps: +_ln-spark-deps: cd config && (find ../extensions/bonfire/ -type f -name "deps.*" -exec ln -sfn {} ./ \; || find ../deps/bonfire/ -type f -name "deps.*" -exec ln -sfn {} ./ \; || echo "Could not symlink the bonfire_spark deps") && ls -la ./ -@pre-setup-env flavour='classic': +@_pre-setup-env flavour='classic': echo "Using flavour '$flavour' at flavours/$flavour with env '$MIX_ENV' with vars from ./flavours/$flavour/config/$ENV_ENV/.env " - test -f ./flavours/$flavour/config/$ENV_ENV/.env || just pre-setup-env-init flavours/$flavour/config flavours/$flavour/config || just pre-setup-env-init flavours/classic/config flavours/$flavour/config + test -f ./flavours/$flavour/config/$ENV_ENV/.env || just _pre-setup-env-init flavours/$flavour/config flavours/$flavour/config || just _pre-setup-env-init flavours/classic/config flavours/$flavour/config -rm .env ln -sf ./config/$ENV_ENV/.env ./.env -@pre-setup-env-init from to: +@_pre-setup-env-init from to: cat {{from}}/templates/public.env {{from}}/templates/not_secret.env > {{to}}/$ENV_ENV/.env && echo "MIX_ENV=$MIX_ENV" >> {{to}}/$ENV_ENV/.env && echo "FLAVOUR=$flavour" >> {{to}}/$ENV_ENV/.env -@pre-init: assets-ln +@_pre-init: _assets-ln mkdir -p data mkdir -p ./priv/repo/ cp -rf $FLAVOUR_PATH/repo/* ./priv/repo/ @@ -145,27 +145,25 @@ setup-dev: just deps-clean-api just deps-clean-unused WITH_GIT_DEPS=0 just mix deps.get - just ln-spark-deps + just _ln-spark-deps just deps-get extension-post-install: - just ext-migrations-copy + just _ext-migrations-copy -ext-migrations-copy: +_ext-migrations-copy: just mix bonfire.extension.copy_migrations --force setup-prod: just build just deps-get --only prod - just deps-post-get + just _deps-post-get # Prepare environment and dependencies prepare: - just pre-setup $FLAVOUR + just _pre-setup $FLAVOUR just build -prepare-prod: - # Run the app in development @dev *args='': MIX_ENV=dev just dev-run "db" {{args}} @@ -277,7 +275,7 @@ update: init update-repo just update-forks just update-deps just mix deps.get - just deps-post-get + just _deps-post-get just js-deps-get # just mix compile # just db-migrate @@ -285,16 +283,16 @@ update: init update-repo # Update the app and Bonfire extensions in ./deps update-app: update-repo update-deps -pre-update-deps: +_pre-update-deps: @rm -rf deps/*/assets/pnpm-lock.yaml @rm -rf deps/*/assets/yarn.lock @rm -rf deps/bonfire/priv/repo # Update Bonfire extensions in ./deps -update-deps: pre-update-deps +update-deps: _pre-update-deps just mix-remote updates -update-repo: pre-contrib-hooks +update-repo: _pre-contrib-hooks @chmod +x git-publish.sh && ./git-publish.sh . pull || git pull update-repo-pull: @@ -305,20 +303,20 @@ update-deps-bonfire: just mix-remote bonfire.deps.update # Update every single dependency (use with caution) -update-deps-all: pre-update-deps +update-deps-all: _pre-update-deps just update-forks just mix-remote "deps.update --all" - just deps-post-get + just _deps-post-get just js-ext-deps upgrade - just assets-ln + just _assets-ln just js-ext-deps outdated -just mix "hex.outdated --all" # Update a specify dep (eg. `just update.dep needle`) -update-dep dep: pre-update-deps +update-dep dep: _pre-update-deps just update-fork $dep pull just mix-remote "deps.update $dep" - just deps-post-get + just _deps-post-get ./js-deps-get.sh $dep # Pull the latest commits from all forks @@ -342,10 +340,10 @@ update-fork-path path cmd='pull' mindepth='0' maxdepth='1': @deps-get *args='': just mix deps.get $@ -just mix-remote deps.get $@ || echo "Oops, could not download mix deps" - just deps-post-get + just _deps-post-get just js-deps-get -@deps-post-get: extension-post-install +@_deps-post-get: extension-post-install ln -sf ../../../priv/static extensions/bonfire/priv/static || ln -sf ../../../priv/static deps/bonfire/priv/static || echo "Could not find a priv/static dir to use" -cd deps/bonfire/priv && ln -sf ../../../priv/repo -cd extensions/bonfire/priv && ln -sf ../../../priv/repo @@ -370,13 +368,13 @@ deps-clean dep: #### DEPENDENCY & EXTENSION RELATED COMMANDS #### -js-deps-get: js-ext-deps assets-ln +js-deps-get: js-ext-deps _assets-ln @js-ext-deps yarn_args='': chmod +x ./config/deps.js.sh just cmd ./config/deps.js.sh $yarn_args -@assets-ln: +@_assets-ln: {{ if path_exists("extensions/bonfire_ui_common")=="true" { "ln -sf extensions/bonfire_ui_common/assets && echo Assets served from the local UI.Common extension will be used" } else {"ln -sf deps/bonfire_ui_common/assets "} }} deps-outdated: deps-unlock-unused @@ -444,13 +442,13 @@ messctl *args='': init #### CONTRIBUTION RELATED COMMANDS #### -pre-push-hooks: pre-contrib-hooks +_pre-push-hooks: _pre-contrib-hooks just mix format just icons-uniq just deps-clean bonfire # just mix changelog -pre-contrib-hooks: +_pre-contrib-hooks: -ex +%s,/extensions/,/deps/,e -scwq config/deps_hooks.js rm -rf forks/*/data/uploads/favicons/ rm -rf extensions/*/data/uploads/favicons/ @@ -460,16 +458,16 @@ icons-uniq: sort -u -o assets/static/images/icons/icons.css assets/static/images/icons/icons.css # Push all changes to the app and extensions in ./forks -contrib: pre-push-hooks contrib-forks-publish git-publish +contrib: _pre-push-hooks contrib-forks-publish git-publish # Push all changes to the app and extensions in forks, increment the app version number, and push a new version/release -contrib-release: pre-push-hooks contrib-forks-publish update contrib-app-release +contrib-release: _pre-push-hooks contrib-forks-publish update contrib-app-release # Rebase app's repo and push all changes to the app -contrib-app-only: pre-push-hooks update-repo git-publish +contrib-app-only: _pre-push-hooks update-repo git-publish # Increment the app version number and commit/push -contrib-app-release: pre-push-hooks contrib-app-release-increment git-publish +contrib-app-release: _pre-push-hooks contrib-app-release-increment git-publish # Increment the app version number @contrib-app-release-increment: @@ -596,11 +594,11 @@ test-db-reset: init db-pre-migrations #### RELEASE RELATED COMMANDS (Docker-specific for now) #### -rel-init: - MIX_ENV=prod just pre-init +_rel-init: + MIX_ENV=prod just _pre-init # copy current flavour's config, without using symlinks -@rel-config-prepare: +@_rel-config-prepare: rm -rf data/current_flavour mkdir -p data rm -rf flavours/*/config/*/dev @@ -609,7 +607,7 @@ rel-init: cp -rfL extensions/bonfire/deps.* data/current_flavour/config/ || cp -rfL deps/bonfire/deps.* data/current_flavour/config/ || echo "Could not copy the deps definitions from the bonfire_spark dep" # copy current flavour's config, without using symlinks -@rel-prepare: rel-config-prepare +@_rel-prepare: _rel-config-prepare mkdir -p extensions/ mkdir -p forks/ mkdir -p data/uploads/ @@ -627,11 +625,14 @@ rel-build-release ARGS="": # Build the release rel-build USE_EXT="local" ARGS="": - @just {{ if WITH_DOCKER != "no" {"rel-build-docker"} else {"rel-build-OTP"} }} {{ USE_EXT }} {{ ARGS }} + @just {{ if WITH_DOCKER != "no" {"rel-build-docker"} else {"_rel-build-OTP"} }} {{ USE_EXT }} {{ ARGS }} # Build the OTP release -rel-build-OTP USE_EXT="local" ARGS="": rel-init rel-prepare - just rel-mix {{ USE_EXT }} compile +rel-build-OTP USE_EXT="local" ARGS="": + WITH_DOCKER=no just _rel-build-OTP {{ USE_EXT }} {{ ARGS }} + +_rel-build-OTP USE_EXT="local" ARGS="": _rel-init _rel-prepare + just rel-mix {{ USE_EXT }} compile --return-errors {{ ARGS }} yarn -v || npm install --global yarn -rm -rf priv/static cd ./assets && yarn && yarn build && cd .. @@ -644,7 +645,7 @@ rel-mix USE_EXT="local" ARGS="": @MIX_ENV=prod CI=1 just {{ if USE_EXT=="remote" {"mix-remote"} else {"mix"} }} {{ ARGS }} # Build the Docker image -@rel-build-docker USE_EXT="local" ARGS="": rel-init rel-prepare assets-prepare +@rel-build-docker USE_EXT="local" ARGS="": _rel-init _rel-prepare assets-prepare export $(./tool-versions-to-env.sh 3 | xargs) && export $(grep -v '^#' .tool-versions.env | xargs) && export ELIXIR_DOCKER_IMAGE="${ELIXIR_VERSION}-erlang-${ERLANG_VERSION}-alpine-${ALPINE_VERSION}" && echo $ELIXIR_DOCKER_IMAGE && just rel-build-path {{ if USE_EXT=="remote" {"data/null"} else {EXT_PATH} }} {{ ARGS }} rel-build-path FORKS_TO_COPY_PATH ARGS="": @@ -665,7 +666,7 @@ rel-build-path FORKS_TO_COPY_PATH ARGS="": @rel-tag label='latest': just rel-tag-commit $APP_BUILD {{label}} -@rel-tag-commit build label='latest': rel-init +@rel-tag-commit build label='latest': _rel-init docker tag $APP_DOCKER_REPO:release-$FLAVOUR-$APP_VSN-{{build}}-{{arch()}} $APP_DOCKER_REPO:{{label}}-$FLAVOUR-{{arch()}} docker tag $APP_DOCKER_REPO:release-$FLAVOUR-$APP_VSN-{{build}}-{{arch()}} $APP_DOCKER_REPO_ALT:release-$FLAVOUR-$APP_VSN-{{build}} docker tag $APP_DOCKER_REPO:release-$FLAVOUR-$APP_VSN-{{build}}-{{arch()}} $APP_DOCKER_REPO_ALT:{{label}}-$FLAVOUR-{{arch()}} @@ -687,13 +688,13 @@ rel-push-only-alt build label='latest': @docker push $APP_DOCKER_REPO_ALT:release-$FLAVOUR-$APP_VSN-{{build}}-{{arch()}} && docker push $APP_DOCKER_REPO_ALT:{{label}}-$FLAVOUR-{{arch()}} # Run the app in Docker & starts a new `iex` console -rel-run services="db proxy": rel-init docker-stop-web +rel-run services="db proxy": _rel-init docker-stop-web just rel-services $services echo Run with Docker based on image $APP_DOCKER_IMAGE @docker compose -p $APP_REL_CONTAINER -f $APP_REL_DOCKERCOMPOSE run --name $WEB_CONTAINER --service-ports --rm web bin/bonfire start_iex # Run the app in Docker, and keep running in the background -rel-run-bg services="db proxy": rel-init docker-stop-web +rel-run-bg services="db proxy": _rel-init docker-stop-web just rel-services $services @docker compose -p $APP_REL_CONTAINER -f $APP_REL_DOCKERCOMPOSE up -d @@ -713,25 +714,25 @@ rel-down: rel-stop @docker compose -p $APP_REL_CONTAINER -f $APP_REL_DOCKERCOMPOSE down # Runs a the app container and opens a simple shell inside of the container, useful to explore the image -rel-shell services="db proxy": rel-init docker-stop-web +rel-shell services="db proxy": _rel-init docker-stop-web just rel-services $services @docker compose -p $APP_REL_CONTAINER -f $APP_REL_DOCKERCOMPOSE run --name $WEB_CONTAINER --service-ports --rm web /bin/bash # Runs a simple shell inside of the running app container, useful to explore the image -rel-shell-bg services="db proxy": rel-init +rel-shell-bg services="db proxy": _rel-init just rel-services $services @docker compose -p $APP_REL_CONTAINER -f $APP_REL_DOCKERCOMPOSE exec web /bin/bash # Runs a simple shell inside of the DB container, useful to explore the image -rel-db-shell-bg: rel-init +rel-db-shell-bg: _rel-init just rel-services db @docker compose -p $APP_REL_CONTAINER -f $APP_REL_DOCKERCOMPOSE exec db /bin/bash -rel-db-dump: rel-init +rel-db-dump: _rel-init just rel-services db docker compose -p $APP_REL_CONTAINER -f $APP_REL_DOCKERCOMPOSE exec db /bin/bash -c "PGPASSWORD=$POSTGRES_PASSWORD pg_dump --username $POSTGRES_USER $POSTGRES_DB" > data/db_dump.sql -rel-db-restore: rel-init +rel-db-restore: _rel-init just rel-services db cat $file | docker exec -i bonfire_release_db_1 /bin/bash -c "PGPASSWORD=$POSTGRES_PASSWORD psql -U $POSTGRES_USER $POSTGRES_DB" diff --git a/mix.exs b/mix.exs index 314e55ee6e..b3cf69df62 100755 --- a/mix.exs +++ b/mix.exs @@ -26,7 +26,9 @@ defmodule Bonfire.Umbrella.MixProject do @maybe_api_deps if(System.get_env("WITH_API_GRAPHQL") == "yes", do: [ {:bonfire_api_graphql, - git: "https://github.com/bonfire-networks/bonfire_api_graphql"} + git: "https://github.com/bonfire-networks/bonfire_api_graphql"}, + {:absinthe_client, + git: "https://github.com/bonfire-networks/absinthe_client"} ], else: [] ) @@ -131,6 +133,7 @@ defmodule Bonfire.Umbrella.MixProject do umbrella_root?: @use_local_forks, umbrella_path: @umbrella_path ) + # |> IO.inspect(limit: :infinity) @extra_release_apps @deps |> Enum.filter(fn @@ -154,7 +157,7 @@ defmodule Bonfire.Umbrella.MixProject do # TODO: put these in ENV or an external writeable config file similar to deps.* @config [ # note that the flavour will automatically be added where the dash appears - version: "0.9.10-beta.48", + version: "0.9.10-beta.49", elixir: ">= #{System.get_env("ELIXIR_VERSION", "1.13.4")}", flavour: @flavour, default_flavour: @default_flavour,