Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
168c18a
fixup
andrevis Jun 26, 2025
dada4e1
create db
andrevis Jun 27, 2025
5572a18
create db
andrevis Jun 27, 2025
d8e9981
create db
andrevis Jun 27, 2025
30e27cc
create db
andrevis Jun 27, 2025
9b7f631
fix
andrevis Jun 27, 2025
c48f452
fix
andrevis Jun 27, 2025
147e4f7
fix
andrevis Jun 27, 2025
93ab69e
fix
andrevis Jun 27, 2025
43cc674
fix
andrevis Jun 27, 2025
4431f2b
fixip
andrevis Jun 27, 2025
bd1fada
fixip
andrevis Jun 27, 2025
da93b23
fixip
andrevis Jun 27, 2025
daf7aaa
fixip
andrevis Jun 27, 2025
6ca97dc
fixip
andrevis Jun 27, 2025
c419cf0
fixip
andrevis Jun 27, 2025
9635e44
fixip
andrevis Jun 27, 2025
1c9edab
fixip
andrevis Jun 27, 2025
9e8b4d6
fixip
andrevis Jun 27, 2025
25df970
fixip
andrevis Jun 27, 2025
b4dcb33
fixip
andrevis Jun 27, 2025
3ef7cca
fixip
andrevis Jun 27, 2025
cd64ef6
fixip
andrevis Jun 27, 2025
6f9e481
fixip
andrevis Jun 27, 2025
eb51d8f
fixip
andrevis Jun 27, 2025
61a6947
fixip
andrevis Jun 27, 2025
ed606c9
fixip
andrevis Jun 27, 2025
a42f96b
fixip
andrevis Jun 27, 2025
a3de029
fixip
andrevis Jun 27, 2025
f219292
fixip
andrevis Jun 27, 2025
5bfab17
fixip
andrevis Jun 27, 2025
6bb5c32
fixip
andrevis Jun 27, 2025
d0c3d7a
fixip
andrevis Jun 27, 2025
4f63b44
fixip
andrevis Jun 27, 2025
1ccdb53
fixip
andrevis Jun 27, 2025
4d85c28
fixip
andrevis Jun 27, 2025
034a71b
fixip
andrevis Jun 27, 2025
3fe1f3a
fixip
andrevis Jun 27, 2025
9ccbb7c
fixip
andrevis Jun 27, 2025
5058dd8
fixip
andrevis Jun 27, 2025
ecbd91e
fixip
andrevis Jun 27, 2025
4c86184
fixip
andrevis Jun 27, 2025
79fee2f
fixip
andrevis Jun 27, 2025
1235bad
fixip
andrevis Jun 27, 2025
1791389
fixip
andrevis Jun 27, 2025
2900602
fixip
andrevis Jun 27, 2025
fdafe90
fixip
andrevis Jun 27, 2025
8d4446d
Update ci.yml
andrevis Jun 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 53 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,16 @@ jobs:
DIRECTORY: /opt/jbond
ADDR: ${{ secrets.JBOND_SSH_DOMAIN }}
PORT: 8080
CRON_CERT_RENEW_JOB: '30 4 * * * /usr/bin/certbot renew --quiet'
CRON_CERT_RENEW_FILE: certbot.renew.cron
CRON_CERT_RENEW_JOB: "30 4 * * * /usr/bin/certbot renew --quiet"
CRON_CERT_RENEW_FILE: ~/certbot.renew.cron
PG_HBA: /var/lib/pgsql/data/pg_hba.conf
DB_NAME: jbond_db
DB_USER: jbond
DB_PASS: jbond
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Set up Python
# This is the version of the action for setting up Python, not the Python version.
uses: actions/setup-python@v5
Expand All @@ -26,11 +31,18 @@ jobs:
python-version: '3.x'
# Optional - x64 or x86 architecture, defaults to x64
architecture: 'x64'

- name: Set up Python libs
run: |
python3 -m ensurepip
python3 -m venv /opt/certbot/
pip3 install aiogram tomli certbot

# - name: Install some html stuff
# run: |
# yes | yum install npm
# npm install toml

- name: install ssh keys
# check this thread to understand why its needed:
# <https://stackoverflow.com/a/70447517>
Expand All @@ -39,24 +51,55 @@ jobs:
echo "${{ secrets.JBOND_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
cat ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.JBOND_SSH_HOST }} > ~/.ssh/known_hosts

- name: Stop postgresql
continue-on-error: true
run: |
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "systemctl stop postgresql && systemctl disable postgresql"

- name: Install postgresql
continue-on-error: true
run: |
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "yes | yum install postgresql-server"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "postgresql-setup --initdb --unit postgresql"

- name: Init postgresql cfg
run: |
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "cp -f $PG_HBA ${PG_HBA}.bkp"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "sed -n -i -E '/local\s+all/d' $PG_HBA"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "sed -n -i '/$DB_NAME/d' $PG_HBA"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "echo "local all postgres trust" >> $PG_HBA"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "echo "local $DB_NAME $DB_USER password" >> $PG_HBA"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "echo "host $DB_NAME $DB_USER 127.0.0.1/32 password" >> $PG_HBA"

- name: Start postgresql
run: |
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "systemctl enable postgresql && systemctl start postgresql"

- name: Create postgresql db
continue-on-error: true
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "$DIRECTORY/db/init.sh ${DB_NAME} ${DB_USER} ${DB_PASS}"

# - name: Create postgresql db
# run: |
# ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "psql -U postgres -c "CREATE USER ${DB_USER} PASSWORD \'${DB_PASS}\';""
# ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "psql -U postgres -c "CREATE DATABASE ${DB_NAME} OWNER=${DB_USER};""

- name: open port
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "firewall-cmd --zone=public --add-port=$PORT/tcp --permanent"
- name: clone repo
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "rm -rf $DIRECTORY && git clone https://github.com/andrevis/jbond.git $DIRECTORY"
- name: checkout-pull
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "cd $DIRECTORY && git checkout $BRANCH && git pull origin $BRANCH"
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "cd $DIRECTORY && git checkout $BRANCH -- && git pull origin $BRANCH"
- name: stop service
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "systemctl stop jbond.service && systemctl disable jbond.service"
# - name: gen self-signed ssl keys
# run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "openssl req -new -nodes -batch -x509 -newkey rsa:2048 -keyout $DIRECTORY/key.pem -out $DIRECTORY/cert.pem -days 365 -subj '/C=RU/CN=185.68.21.112'"
- name: gen cert
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "certbot certonly --standalone -n -d $ADDR -d www.$ADDR"
- name: Add certbot renew job
run: |
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "crontab -l | sed '/certbot renew/d' > $CRON_CERT_RENEW_FILE"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "crontab -l | sed -n '/certbot renew/d' > $CRON_CERT_RENEW_FILE"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "echo '$CRON_CERT_RENEW_JOB' >> $CRON_CERT_RENEW_FILE"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "crontab $CRON_CERT_RENEW_FILE"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "rm -f $CRON_CERT_RENEW_FILE"

- name: gen config
run: |
Expand All @@ -67,8 +110,6 @@ jobs:
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "echo '[bot]' >> $DIRECTORY/jbond.toml"
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "echo 'token = \"${{ secrets.JBOND_BOT_TOKEN }}\"' >> $DIRECTORY/jbond.toml"

# - name: set bot token
# run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "echo ${{ secrets.JBOND_BOT_TOKEN }} > $DIRECTORY/token"
- name: setup service
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "cp -f $DIRECTORY/misc/jbond.service /usr/lib/systemd/system/"
- name: enable service
Expand All @@ -77,4 +118,6 @@ jobs:
run: ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "cp -f $DIRECTORY/misc/jbond_logrotate /etc/logrotate.d/ && systemctl restart crond"
- name: cleanup keys
if: always()
run: rm -rf ~/.ssh/id_rsa
run: |
ssh ${{ secrets.JBOND_SSH_USER }}@${{ secrets.JBOND_SSH_HOST }} "rm -f $CRON_CERT_RENEW_FILE"
rm -f ~/.ssh/id_rsa
10 changes: 10 additions & 0 deletions db/init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash

db_name=$1
db_user=$2
db_pass=$3

psql -U postgres -c "DROP DATABASE ${db_name};"
psql -U postgres -c "DROP USER ${db_user};"
psql -U postgres -c "CREATE USER ${db_user} PASSWORD '${db_pass}';"
psql -U postgres -c "CREATE DATABASE ${db_name} OWNER=${db_user};"
88 changes: 82 additions & 6 deletions html/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,92 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Telegram Mini App</title>
<title>JBond telegram web app</title>

<script src="https://telegram.org/js/telegram-web-app.js"></script>

<script src="toml/toml.js"></script>
<script src="nouislider/nouislider.js"></script>

<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="nouislider/nouislider.css">
</head>
<body>
<button id="openData">Get Web App Data</button>
<div id="output"></div>
<script src="script.js"></script>

<label> <input type="checkbox" id="qual" name="qualified" value="no" checked/> Is qualified </label>
<label> <input type="checkbox" id="amort" name="amortization" value="yes" checked/> Amortization </label>
<div class="wrapper">
<label class=block-name>От срока до погашения, мес</label>
<div class="fields">
<div class="field field-left">
<input type="number" id="duration-from" value="3" min="0" max="120" maxlength="3">
</div>
<span class="separator">-</span>
<div class="field field-right">
<input type="number" id="duration-to" value="36" min="1" max="120" maxlength="3">
</div>
</div>
<div id="duration-slider" class="slider"></div>
</div>

<div class="wrapper">
<label class=block-name>Доходность к погашению, %</label>
<div class="fields">
<div class="field field-left">
<input type="number" id="full-profit-from" value="0.0" min="0.0" max="50.0" maxlength="5">
</div>
<span class="separator">-</span>
<div class="field field-right">
<input type="number" id="full-profit-to" value="20.0" min="0.0" max="50.0" maxlength="5">
</div>
</div>
<div id="full-profit-slider" class="slider"></div>
</div>

<div class="wrapper">
<label class=block-name>Див-доходность к погашению, %</label>
<div class="fields">
<div class="field field-left">
<input type="number" id="div-profit-from" value="0.0" min="0.0" max="50.0" maxlength="5">
</div>
<span class="separator">-</span>
<div class="field field-right">
<input type="number" id="div-profit-to" value="20.0" min="0.0" max="50.0" maxlength="5">
</div>
</div>
<div id="div-profit-slider" class="slider"></div>
</div>

<div class="wrapper">
<label class=block-name>Рейтинг не ниже</label>
<div class="fields">
<div class="field field-left">
<input type="text" id="rating-from" minlength="1" maxlength="4">
</div>
</div>
<div id="rating-slider" class="slider single-slider"></div>
</div>

<div class="wrapper">
<div>
<input type="checkbox" id="is_qual" name="qualified" value="no"/> <label class="block-name"> Добавить для квалов </label>
</div>
<div>
<label> <input type="checkbox" id="is_amort" name="amortization" value="yes"/><label class="block-name"> Добавить с амортизацией </label>
</div>
</div>


<p>
<div style="text-align: center;">
<button id="btn_ok">Готово</button>
</div>
</p>

<div><label>Фильтры</label>
<textarea id="filters" name="filters" rows="4" cols="200"></textarea>
</div>

<!-- <div><label>Фильтры</label> <input id="filters" type="text" value="" length="100" maxlength="1000"></div> -->

<script src="script.js"></script>
</body>
</html>
Loading
Loading