Предположим, Вы написали крутую программу. И она размазана, скажем на 10 файлов. Или нет, лучше на 50. И Вам захотелось сделать инсталятор. Первая мысль - вручную заливать все файлы на pastebin, потом писать инсталятор, в нём же вручную прописывать коды файлов на pastebin, и их целевые адреса в системе. Это предложение даже читать больно, не то что совершать описанное в нём действие. Но, выход есть. И так, нам понадобятся две вещи:
Github аккаунт
Хостинг, на котором можно разместить серверную часть.
И если с первым всё предельно понятно, то со вторым возникает вопрс: А где его, собственно, взять? Вариантов много. Можно арендовать VPS, поднять сервер на домашнем компьютере или Raspberry Pi, можно воспользоваться услугами таких сайтов как Heroku или PythonAnywhere. Последний вариант примечателен тем, что он полностью бесплатный. И так, какой из сайтов выбрать? PythonAnywhere имеет более ограниченный функционал, по сравнению с Heroku. Но, при этом он намного легче в настройке и эксплуатации, так что остановимся на нём. Далее по пунктам:
1)Заливаем программу на гитхаб.
2)Переходим по ссылке, и создаём токен. Ставим только одну галочку:
После создания запоминаем копируем токен, он нам дальше пригодится. Обращаю внимание, что токен нужно держать в секрете.
3) На этом этапе нам нужен хостинг. Я рассмотрю пример с www.pythonanywhere.com . Идём на сайт, регистрируем аккаунт и создаём Flask приложение. В этом нет ничего сложного, если знать английский. Находим файл flask_app.py, и вставляем в него следующее содержимое:
from flask import Flask
from flask import request
import requests
import json
def request_url(url, result):
r = requests.get(url)
j = json.loads(r.text)
for x in j:
if x["type"] == "file":
result = result + "\"" + x["path"] + "\","
else:
result = request_url(x["url"],result)
return result
app = Flask(__name__)
#@app.route('/',methods=['POST'])
def main():
uname = ""# Сюда нужно прописать логин аккаунта Github
token = ""# А сюда полученный токен
if uname != request.args["owner"]:
return "{}"
result = request_url("https://"+uname+":"+token+"@api.github.com/repos/"+request.args["owner"]+"/"+request.args["repo"]+"/contents"+request.args["path"]+"?ref="+request.args["ref"],"{")
result = result + "}"
return result
app.add_url_rule("/", "main", main,methods=['GET'])
Заполняем поля uname и token, и можно двигаться дальше.
4) На своём компьютере создаём Lua файл, и вставляем в него:
local internet = require("internet")
local fs = require("filesystem")
local shell = require("shell")
local ser = require("serialization")
local host = ""--Хост, на котором расположена серверная часть
local owner = ""--Логин аккаунта Github
local repo = ""--Название репозитория
local ref = "master"--Название ветки
local path = "/"--Путь к папке, из которой скачивать файлы
local deploy_to = "/"--Куда скачивать файлы
function request(url)
local data = ""
local result, response = pcall(internet.request, url)
if result then
local result = pcall(function()
for chunk in response do
data = data .. chunk
end
end)
end
return data
end
files = ser.unserialize(request("http://"..host.."/?owner="..owner.."&repo="..repo.."&path="..path.."&ref="..ref))
for _,v in pairs(files) do
local pth = deploy_to..v
if not fs.exists(pth:match(".*/")) then fs.makeDirectory(pth:match(".*/")) end
shell.execute("wget -f ".."https://raw.githubusercontent.com/"..owner.."/"..repo.."/"..ref.."/"..v.." "..pth)
end
Заполняем поля, и готово.