Skip to content

Commit

Permalink
update to use gitpod
Browse files Browse the repository at this point in the history
  • Loading branch information
NielMc committed May 23, 2024
1 parent f2cb2db commit e630760
Show file tree
Hide file tree
Showing 11 changed files with 300 additions and 105 deletions.
47 changes: 0 additions & 47 deletions .devcontainer/Dockerfile

This file was deleted.

44 changes: 0 additions & 44 deletions .devcontainer/devcontainer.json

This file was deleted.

11 changes: 0 additions & 11 deletions .devcontainer/docker-compose.yml

This file was deleted.

59 changes: 59 additions & 0 deletions .gitpod.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
FROM gitpod/workspace-base

RUN echo "CI version from base"

### Python ###
USER gitpod
RUN sudo install-packages python3-pip
ENV PYTHON_VERSION 3.12.2

ENV PATH=$HOME/.pyenv/bin:$HOME/.pyenv/shims:$PATH
RUN curl -fsSL https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash \
&& { echo; \
echo 'eval "$(pyenv init -)"'; \
echo 'eval "$(pyenv virtualenv-init -)"'; } >> /home/gitpod/.bashrc.d/60-python \
&& pyenv update \
&& pyenv install $PYTHON_VERSION \
&& pyenv global $PYTHON_VERSION \
&& python3 -m pip install --no-cache-dir --upgrade pip \
&& python3 -m pip install --no-cache-dir --upgrade \
setuptools wheel virtualenv pipenv pylint rope flake8 \
mypy autopep8 pep8 pylama pydocstyle bandit notebook \
twine \
&& sudo rm -rf /tmp/*USER gitpod
ENV PYTHONUSERBASE=/workspace/.pip-modules \
PIP_USER=yes
ENV PATH=$PYTHONUSERBASE/bin:$PATH

# Setup Heroku CLI
RUN curl https://cli-assets.heroku.com/install.sh | sh

# Setup MongoDB (4.4 from Focal repos)
RUN wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb && sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb && \
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 20691eec35216c63caf66ce1656408e390cfb1f5 && \
sudo sh -c 'echo "deb http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list' && \
sudo apt-get update -y && \
sudo touch /etc/init.d/mongod && \
sudo apt-get install -y mongodb-org-shell && \
sudo apt-get install -y links && \
sudo apt-get clean -y && \
sudo rm -rf /var/cache/apt/* /var/lib/apt/lists/* /tmp/* /home/gitpod/*.deb && \
sudo chown -R gitpod:gitpod /home/gitpod/.cache/heroku/



# Add aliases

RUN echo 'alias run="python3 $GITPOD_REPO_ROOT/manage.py runserver 0.0.0.0:8000"' >> ~/.bashrc && \
echo 'alias heroku_config=". $GITPOD_REPO_ROOT/.vscode/heroku_config.sh"' >> ~/.bashrc && \
echo 'alias python=python3' >> ~/.bashrc && \
echo 'alias pip=pip3' >> ~/.bashrc && \
echo 'alias arctictern="python3 $GITPOD_REPO_ROOT/.vscode/arctictern.py"' >> ~/.bashrc && \
echo 'alias font_fix="python3 $GITPOD_REPO_ROOT/.vscode/font_fix.py"' >> ~/.bashrc && \
echo 'alias mongosh=mongo' >> ~/.bashrc && \
echo 'alias make_url="python3 $GITPOD_REPO_ROOT/.vscode/make_url.py "' >> ~/.bashrc

# Local environment variables
ENV PORT="8080"
ENV IP="0.0.0.0"

16 changes: 16 additions & 0 deletions .gitpod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
image:
file: .gitpod.dockerfile
tasks:
- init: . ${GITPOD_REPO_ROOT}/.vscode/init_tasks.sh
command: /home/gitpod/.pg_ctl/bin/pg_start > /dev/null
- command: . ${GITPOD_REPO_ROOT}/.vscode/uptime.sh &
vscode:
extensions:
- ms-python.python
- formulahendry.auto-close-tag
- eventyret.bootstrap-4-cdn-snippet
- hookyqr.beautify
- matt-rudge.auto-open-preview-panel
- ms-toolsai.jupyter
- ms-toolsai.jupyter-keymap
- ms-toolsai.jupyter-renderers
186 changes: 186 additions & 0 deletions .vscode/arctictern.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
"""
arctictern.py
A little script that does a big migration
"""

import json
import os
import requests
import shutil
import subprocess
import sys
from os.path import exists

COLOURS = {"red": "\033[31m",
"blue": "\033[34m",
"green": "\033[32m",
"reset": "\033[0m",
"bold": "\033[1m"}

BASE_URL = "https://raw.githubusercontent.com/Code-Institute-Org/gitpod-full-template/main/"
CURRENT_VERSION = 1.0
THIS_VERSION = 1.0


UPGRADE_FILE_LIST = [{"filename": ".vscode/settings.json",
"url": ".vscode/settings.json"
},
{"filename": ".vscode/launch.json",
"url": ".vscode/launch.json"
},
{"filename": ".gitpod.yml",
"url": ".gitpod.yml"
},
{"filename": ".gitpod.dockerfile",
"url": ".gitpod.dockerfile"
},
{"filename": ".vscode/heroku_config.sh",
"url": ".vscode/heroku_config.sh"
},
{"filename": ".vscode/init_tasks.sh",
"url": ".vscode/init_tasks.sh"
},
{"filename": ".vscode/uptime.sh",
"url": ".vscode/uptime.sh"
},
{"filename": ".vscode/make_url.py",
"url": ".vscode/make_url.py"
},
{"filename": ".vscode/arctictern.py",
"url": ".vscode/arctictern.py"
}]

FINAL_LINES = "\nexport POST_UPGRADE_RUN=1\nsource ~/.bashrc\n"


def get_versions():

if exists(".vscode/version.txt"):
with open(".vscode/version.txt", "r") as f:
THIS_VERSION = float(f.read().strip())
else:
with open(".vscode/version.txt", "w") as f:
f.write(str(THIS_VERSION))

r = requests.get(BASE_URL + ".vscode/version.txt")
CURRENT_VERSION = float(r.content)

return {"this_version": THIS_VERSION,
"current_version": CURRENT_VERSION}

def needs_upgrade():
"""
Checks the version of the current template against
this version.
Returns True if upgrade is needed, False if not.
"""

versions = get_versions()

print(f"Upstream version: {versions['current_version']}")
print(f"Local version: {versions['this_version']}")

return versions["current_version"] > versions["this_version"]


def write_version():

versions = get_versions()

with open(".vscode/version.txt", "w") as f:
f.write(str(versions["current_version"]))


def build_post_upgrade():

r = requests.get(BASE_URL + ".vscode/upgrades.json")
upgrades = json.loads(r.content.decode("utf-8"))
content = ""

for k,v in upgrades.items():
if float(k) > THIS_VERSION:
print(f"Adding version changes for {k} to post_upgrade.sh")
content += v

if content:
content += FINAL_LINES
with open(".vscode/post_upgrade.sh", "w") as f:
f.writelines(content)

print("Built post_upgrade.sh. Restart your workspace for it to take effect.")


def process(file, suffix):
"""
Replaces and optionally backs up the files that
need to be changed.
Arguments: file - a path and filename
suffix - the suffix to the BASE_URL
"""

if file == ".gitpod.dockerfile" or file == ".gitpod.yml":
try:
shutil.copyfile(file, f"{file}.tmp")
except FileNotFoundError:
pass

with open(file, "wb") as f:
r = requests.get(BASE_URL + suffix)
f.write(r.content)

if exists(f"{file}.tmp"):
result = os.system(f"diff -q {file} {file}.tmp > /dev/null")
if result != 0:
os.remove(f"{file}.tmp")
return True

return False


def start_migration():
"""
Calls the process function and
renames the directory
"""
push_and_recreate = False

if not os.path.isdir(".vscode"):
print("Creating .vscode directory")
os.mkdir(".vscode")

for file in UPGRADE_FILE_LIST:
print(f"Processing: {file['filename']}")
result = process(file["filename"], file["url"])
if result == True:
push_and_recreate = True

if push_and_recreate:
write_version()

if needs_upgrade() and not push_and_recreate:
build_post_upgrade()

print("Changes saved.")
print("Please add, commit and push to GitHub.")
print("You may need to stop and restart your workspace for")
print("the changes to take effect.\n")

if push_and_recreate:
print(f"{COLOURS['red']}{COLOURS['bold']}*** IMPORTANT INFORMATION ***{COLOURS['reset']}")
print("The files used to create this workspace have been updated")
print("Please download any files that are in .gitignore and")
print("recreate this workspace by clicking on the Gitpod button")
print("in GitHub. Then, upload your saved files again.\n")


if __name__ == "__main__":

print(f"\n🐦 {COLOURS['blue']}{COLOURS['bold']}ArcticTern version 0.3{COLOURS['reset']}")
print("CI Template Migration Utility")
print("-----------------------------")
print("Upgrades the workspace to the latest version.\n")

if input("Start? Y/N ").lower() == "y":
start_migration()
else:
sys.exit("Migration cancelled by the user")
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ else
fi
echo
echo Exiting
fi
fi
13 changes: 13 additions & 0 deletions .vscode/init_tasks.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

# Gives a personalised greeting
# Adds configuration options for SQLite
# Creates run aliases
# Author: Matt Rudge

echo "Setting the greeting"
sed -i "s/USER_NAME/$GITPOD_GIT_USER_NAME/g" ${GITPOD_REPO_ROOT}/README.md
echo "Creating .sqliterc file"
echo ".headers on" > ~/.sqliterc
echo ".mode column" >> ~/.sqliterc
echo "Your workspace is ready to use. Happy coding!"
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@
api_key = re.findall(r"['](.*?)[']",content[16])[0]
api_secret = re.findall(r"['](.*?)[']",content[17])[0]

print(f"cloudinary://{api_key}:{api_secret}@{cloud_name}")
print(f"cloudinary://{api_key}:{api_secret}@{cloud_name}")
Loading

0 comments on commit e630760

Please sign in to comment.