Skip to content

Commit

Permalink
Fix dev-container image generation for GitHub Codespace (#145)
Browse files Browse the repository at this point in the history
  • Loading branch information
yvan-sraka authored Apr 10, 2024
1 parent c212848 commit b915e67
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 12 deletions.
24 changes: 16 additions & 8 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# We build the Docker image from a Dockerfile rather than from a Nix expression
# This is because VSCode DevContainer / GitHub Codespace run an install script
# at first launch that mostly consider your machine to be Debian-based.
FROM ubuntu:rolling
# TODO: But there is likely a better immutable way to build this image ...
# https://github.com/input-output-hk/devx-aux/issues/115
WORKDIR /workspaces

ARG PLATFORM="x86_64-linux"
Expand All @@ -24,29 +29,32 @@ source $(grep -m 1 -e '-env.sh$' store-paths.txt)
EOF

# This enforce those settings in DevContainer whatever "Settings Sync" user preferences ...
RUN mkdir -p $HOME/.vscode-server/data/Machine/ \
&& cat <<EOF >> $HOME/.vscode-server/data/Machine/settings.json
{ "haskell.manageHLS": "PATH" }
EOF
RUN bash -ic 'source $HOME/.bashrc && mkdir -p $HOME/.vscode-server/data/Machine/ && \
echo -e "{\n\
\"haskell.manageHLS\": \"PATH\",\n\
\"haskell.serverEnvironment\": { \"PATH\": \"$PATH\" },\n\
\"haskell.serverExecutablePath\": \"$(which haskell-language-server)\"\n\
}" > $HOME/.vscode-server/data/Machine/settings.json'

# FIXME: Consider moving this script into a Nix `writeShellApplication` trivial builder within the closure ...
# ... but that means I should figure it out how to pass to it $COMPILER_NIX_NAME as input?
RUN mkdir -p /usr/local/bin/ \
&& cat <<EOF >> /usr/local/bin/post-create-command
#!/usr/bin/env bash

PROJECT_DIR=\$(find /workspaces/ -mindepth 1 -maxdepth 1 -type d)
PROJECT_DIR=\$(find /workspaces/ -mindepth 1 -maxdepth 1 -type d ! -name '.*' -print -quit)
if [ -n "\$PROJECT_DIR" ]; then
pushd \$PROJECT_DIR > /dev/null
# GitHub Codespaces should have \$GH_TOKEN already set.
if [ -n "\$GH_TOKEN" ]; then
# GitHub Codespaces should have \$GITHUB_TOKEN already set.
if [ -n "\$GITHUB_TOKEN" ]; then
echo \$GITHUB_TOKEN | gh auth login --with-token
COMMIT_HASH=\$(git rev-parse HEAD)
echo "Attempting to download HLS cache from GitHub Artifact (cache-\$COMMIT_HASH-$COMPILER_NIX_NAME) for faster first launch ..."
gh run download -D .download -n "cache-\$COMMIT_HASH-$COMPILER_NIX_NAME"
rsync -a .download/work/cardano-base/cardano-base/dist-newstyle .
rm -r .download
else
echo "\\\$GH_TOKEN is not set. Skipping HLS cache download."
echo "\\\$GITHUB_TOKEN is not set. Skipping HLS cache download."
fi
# HLS error (Couldn't load cradle for ghc libdir) if `cabal update` has never been run in project using cardano-haskell-packages ...
echo "Running `cabal update` ..."
Expand Down
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,7 @@ To make this developer shell available in VSCode DevContainer or GitHub CodeSpac
"vscode":{
"extensions":[
"haskell.haskell"
],
"settings":{
"haskell.manageHLS":"PATH"
}
]
}
}
}
Expand Down

0 comments on commit b915e67

Please sign in to comment.