From f1940efd73a9657efb925207401ff6ab644b638e Mon Sep 17 00:00:00 2001 From: azuki774s Date: Sat, 20 Jul 2024 10:30:14 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=E6=9C=AA=E3=83=A1=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=83=8A=E3=83=B3=E3=82=B9=E3=81=AA=E3=82=84=E3=81=A4=E3=82=92?= =?UTF-8?q?=E4=B8=80=E6=97=A6=E6=B6=88=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/image-push.yml | 120 -------------------- Makefile | 12 -- build/Dockerfile-auelect | 5 - build/Dockerfile-nicigas | 5 - build/Dockerfile-remix | 5 - build/Dockerfile-tokyowater | 3 - docs/auelect.png | Bin 98526 -> 0 bytes requirements/auelect_requirements.txt | 2 - src/auelect/load.py | 0 src/auelect/main.py | 20 ---- src/auelect/write.py | 0 src/nicigas/main.py | 48 -------- src/nicigas/nicigas.py | 157 -------------------------- src/nicigas/writer.py | 16 --- src/remix/main.py | 40 ------- src/remix/remix.py | 95 ---------------- src/remix/writer.py | 31 ----- src/tokyowater/main.py | 34 ------ src/tokyowater/water.py | 69 ----------- src/tokyowater/writer.py | 16 --- test/auremix.html | 23 ---- 21 files changed, 701 deletions(-) delete mode 100644 build/Dockerfile-auelect delete mode 100644 build/Dockerfile-nicigas delete mode 100644 build/Dockerfile-remix delete mode 100644 build/Dockerfile-tokyowater delete mode 100644 docs/auelect.png delete mode 100644 requirements/auelect_requirements.txt delete mode 100644 src/auelect/load.py delete mode 100644 src/auelect/main.py delete mode 100644 src/auelect/write.py delete mode 100644 src/nicigas/main.py delete mode 100644 src/nicigas/nicigas.py delete mode 100644 src/nicigas/writer.py delete mode 100644 src/remix/main.py delete mode 100644 src/remix/remix.py delete mode 100644 src/remix/writer.py delete mode 100644 src/tokyowater/main.py delete mode 100644 src/tokyowater/water.py delete mode 100644 src/tokyowater/writer.py delete mode 100644 test/auremix.html diff --git a/.github/workflows/image-push.yml b/.github/workflows/image-push.yml index 07efce4..fdc3f59 100644 --- a/.github/workflows/image-push.yml +++ b/.github/workflows/image-push.yml @@ -6,46 +6,6 @@ on: - v* jobs: - build_and_push_remix: - runs-on: ubuntu-latest - env: - IMAGE_NAME: bill-fetcher-remix - steps: - - name: checkout - uses: actions/checkout@v2 - - - name: Set meta - id: meta - uses: docker/metadata-action@v3 - with: - # list of Docker images to use as base name for tags - images: | - ghcr.io/azuki774/bill-fetcher-remix - # generate Docker tags based on the following events/attributes - tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=semver,pattern=latest - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GH_ACCESS_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - file: ./build/Dockerfile-remix - push: true - tags: ${{ steps.meta.outputs.tags }} - build_and_push_sbi: runs-on: ubuntu-latest env: @@ -86,86 +46,6 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} - build_and_push_tokyowater: - runs-on: ubuntu-latest - env: - IMAGE_NAME: bill-fetcher-tokyowater - steps: - - name: checkout - uses: actions/checkout@v2 - - - name: Set meta - id: meta - uses: docker/metadata-action@v3 - with: - # list of Docker images to use as base name for tags - images: | - ghcr.io/azuki774/bill-fetcher-tokyowater - # generate Docker tags based on the following events/attributes - tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=semver,pattern=latest - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GH_ACCESS_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - file: ./build/Dockerfile-tokyowater - push: true - tags: ${{ steps.meta.outputs.tags }} - - build_and_push_nicigas: - runs-on: ubuntu-latest - env: - IMAGE_NAME: bill-fetcher-nicigas - steps: - - name: checkout - uses: actions/checkout@v2 - - - name: Set meta - id: meta - uses: docker/metadata-action@v3 - with: - # list of Docker images to use as base name for tags - images: | - ghcr.io/azuki774/bill-fetcher-nicigas - # generate Docker tags based on the following events/attributes - tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=semver,pattern=latest - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GH_ACCESS_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - file: ./build/Dockerfile-nicigas - push: true - tags: ${{ steps.meta.outputs.tags }} - build_and_push_money_forward: runs-on: ubuntu-latest env: diff --git a/Makefile b/Makefile index ae4c0aa..54449f6 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,9 @@ -CONTAINER_NAME_AUELECT=bill-fetcher-auelect -CONTAINER_NAME_REMIX=bill-fetcher-remix CONTAINER_NAME_SBI=bill-fetcher-sbi -CONTAINER_NAME_TOKYOWATER=bill-fetcher-tokyowater -CONTAINER_NAME_NICIGAS=bill-fetcher-nicigas CONTAINER_NAME_MONEY_FORWARD=bill-fetcher-money-forward .PHONY: build start stop clean build: - docker build -t $(CONTAINER_NAME_AUELECT) -f build/Dockerfile-auelect . - docker build -t $(CONTAINER_NAME_REMIX) -f build/Dockerfile-remix . docker build -t $(CONTAINER_NAME_SBI) -f build/Dockerfile-sbi . - docker build -t $(CONTAINER_NAME_TOKYOWATER) -f build/Dockerfile-tokyowater . - docker build -t $(CONTAINER_NAME_NICIGAS) -f build/Dockerfile-nicigas . docker build -t $(CONTAINER_NAME_MONEY_FORWARD) -f build/Dockerfile-money-forward . start: @@ -24,9 +16,5 @@ debug: docker compose -f deployment/compose.yml up clean: - docker image rm $(CONTAINER_NAME_AUELECT) - docker image rm $(CONTAINER_NAME_REMIX) docker image rm $(CONTAINER_NAME_SBI) - docker image rm $(CONTAINER_NAME_TOKYOWATER) - docker image rm $(CONTAINER_NAME_NICIGAS) docker image rm $(CONTAINER_NAME_MONEY_FORWARD) diff --git a/build/Dockerfile-auelect b/build/Dockerfile-auelect deleted file mode 100644 index f9c3649..0000000 --- a/build/Dockerfile-auelect +++ /dev/null @@ -1,5 +0,0 @@ -FROM python:3.11-bullseye -COPY requirements/ /tmp/ -RUN python -m pip install --upgrade pip && pip install -r /tmp/auelect_requirements.txt -COPY src/auelect/ /src/ -ENTRYPOINT ["python3", "-u", "/src/main.py"] diff --git a/build/Dockerfile-nicigas b/build/Dockerfile-nicigas deleted file mode 100644 index b9444d2..0000000 --- a/build/Dockerfile-nicigas +++ /dev/null @@ -1,5 +0,0 @@ -FROM ghcr.io/azuki774/selenium-chrome:0.1.1 -LABEL description="bill-fetcher-nicigas" -RUN python -m pip install --upgrade pip -ADD src/nicigas/ /src/ -ENTRYPOINT ["python3", "-u", "/src/main.py"] diff --git a/build/Dockerfile-remix b/build/Dockerfile-remix deleted file mode 100644 index 32b5279..0000000 --- a/build/Dockerfile-remix +++ /dev/null @@ -1,5 +0,0 @@ -FROM ghcr.io/azuki774/selenium-chrome:latest -LABEL description="bill-fetcher-remix" -RUN python -m pip install --upgrade pip -ADD src/remix/ /src/ -ENTRYPOINT ["python3", "-u", "/src/main.py"] diff --git a/build/Dockerfile-tokyowater b/build/Dockerfile-tokyowater deleted file mode 100644 index 183f968..0000000 --- a/build/Dockerfile-tokyowater +++ /dev/null @@ -1,3 +0,0 @@ -FROM ghcr.io/azuki774/selenium-chrome:latest -COPY src/tokyowater/ /src/ -ENTRYPOINT ["python3", "-u", "/src/main.py"] diff --git a/docs/auelect.png b/docs/auelect.png deleted file mode 100644 index 2075c7ce5545612ff098a56030c7ebc90333f5f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98526 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 F{{Z>2S(5+& diff --git a/requirements/auelect_requirements.txt b/requirements/auelect_requirements.txt deleted file mode 100644 index 7ffeec0..0000000 --- a/requirements/auelect_requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -beautifulsoup4==4.12.0 -python-json-logger==2.0.7 diff --git a/src/auelect/load.py b/src/auelect/load.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/auelect/main.py b/src/auelect/main.py deleted file mode 100644 index fee369d..0000000 --- a/src/auelect/main.py +++ /dev/null @@ -1,20 +0,0 @@ -from pythonjsonlogger import jsonlogger -import logging -import os -import sys - -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) -h = logging.StreamHandler() -h.setLevel(logging.DEBUG) -json_fmt = jsonlogger.JsonFormatter(fmt='%(asctime)s %(levelname)s %(filename)s %(lineno)s %(message)s', json_ensure_ascii=False) -h.setFormatter(json_fmt) -logger.addHandler(h) - -if __name__ == "__main__": - logger.info("auelect start") - - logger.info("writer start") - - logger.info("writer end") - logger.info("auelect end") diff --git a/src/auelect/write.py b/src/auelect/write.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/nicigas/main.py b/src/nicigas/main.py deleted file mode 100644 index a002b96..0000000 --- a/src/nicigas/main.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -import csv -import time -import os -import sys -import driver -from venv import create -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.chrome.options import Options -from selenium.webdriver.chrome.service import Service -from bs4 import BeautifulSoup -import nicigas -import writer - -def get_driver(): - options = webdriver.ChromeOptions() - options.add_argument("--headless") - options.add_argument("--no-sandbox") - options.add_argument("--disable-gpu") - options.add_argument("--disable-dev-shm-usage") - UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' - options.add_argument('--user-agent=' + UA) - chrome_service = Service(executable_path="/usr/bin/chromedriver") - driver = webdriver.Chrome(service=chrome_service, options=options) - return driver - -if __name__ == "__main__": - print("fetcher start") - args = sys.argv - - options = webdriver.ChromeOptions() - - driver = get_driver() - driver.implicitly_wait(10) - - print("Get driver") - - nicigas.login(driver) - data = nicigas.fetch_invoice(driver) - print("fetcher complete") - - print("writer start") - writer.csvwrite_invoice(data) - print("writer end") - print("the program end") - diff --git a/src/nicigas/nicigas.py b/src/nicigas/nicigas.py deleted file mode 100644 index a7f3102..0000000 --- a/src/nicigas/nicigas.py +++ /dev/null @@ -1,157 +0,0 @@ -from curses import raw -# -*- coding: utf-8 -*- -import csv -import re -import time -import json -import datetime -import os -import driver -from venv import create -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.chrome.options import Options -from selenium.webdriver.chrome.service import Service -from selenium.webdriver.support.ui import Select -from bs4 import BeautifulSoup -from datetime import datetime, timedelta - -def login(driver): - driver.get("https://my.nichigas.co.jp/entry") - html = driver.page_source.encode('utf-8') - - # 事業者選択 - selector = driver.find_element(by=By.XPATH, value='//*[@id="root"]/div/div/div/div/div/div/div[4]/div/select') - select = Select(selector) - select.select_by_value('00005') - - login_button = driver.find_element(by=By.XPATH, value='//*[@id="root"]/div/div/div/div/div/div/div[5]/div') - login_button.click() - - html = driver.page_source.encode('utf-8') - soup = BeautifulSoup(html, 'html.parser') - - # ログインページ操作 - login_id = driver.find_element(by=By.XPATH, value='//*[@id="root"]/div/div/div/div/div/div/div/div[2]/input[1]') - login_id.send_keys(os.getenv("nicigas_id")) - - password_form = driver.find_element(by=By.XPATH, value='//*[@id="root"]/div/div/div/div/div/div/div/div[2]/input[2]') - password_form.send_keys(os.getenv("nicigas_pass")) - - login_button = driver.find_element(by=By.XPATH, value='//*[@id="root"]/div/div/div/div/div/div/div/div[2]/div[4]') - login_button.click() - time.sleep(5) - - html = driver.page_source.encode('utf-8') - soup = BeautifulSoup(html, 'html.parser') - return - -def fetch_invoice(driver): - driver.get("https://my.nichigas.co.jp/dashboard/gas") - time.sleep(5) - html = driver.page_source.encode('utf-8') - soup = BeautifulSoup(html, 'html.parser') - - # soup = BeautifulSoup(open('/src/testtext.htm'), 'html.parser') - label_fields = soup.find_all(class_="card-title") - labels = [] - - price_fields = soup.find_all(class_="list-item--text idx-i0") - prices = [] - - use_amount_fields = soup.find_all(class_="list-item--text idx-i1") - amounts = [] - - billing_done_field = soup.find_all(class_="list-item--text idx-i2") - billing_done = [] - - # 20xx年yy月分総合料金詳細 取得 - i = 0 - for l in label_fields: - labels.append(trim_text(l.get_text())) - i = i + 1 - if i == 12: # 13レコード目以降は重複しているので skip - break - - # 料金 取得 - i = 0 - for l in price_fields: - prices.append(trim_text(l.get_text())) - i = i + 1 - if i == 12: # 13レコード目以降は重複しているので skip - break - - # 使用量 取得 - i = 0 - for l in use_amount_fields: - amounts.append(trim_text(l.get_text())) - i = i + 1 - if i == 12: # 13レコード目以降は重複しているので skip - break - - - # 支払い状態 取得 - i = 0 - for l in billing_done_field: - billing_done.append(trim_text(l.get_text())) - i = i + 1 - if i == 12: # 13レコード目以降は重複しているので skip - break - - records = [] - for i in range(12): - records.append([labels[i], prices[i], amounts[i], billing_done[i]]) - - print(records) - return records - - -def trim_text(text): - text = text.replace("\n", "") - text = text.replace(" ", "") - text = text.replace('\u3000', '') - return text - - -def testfetch_invoice(): - soup = BeautifulSoup(open('/src/testtext.htm'), 'html.parser') - label_fields = soup.find_all(class_="card-title") - labels = [] - - price_fields = soup.find_all(class_="list-item--text idx-i0") - prices = [] - - billing_done_field = soup.find_all(class_="list-item--text idx-i2") - billing_done = [] - - # 20xx年yy月分総合料金詳細 取得 - i = 0 - for l in label_fields: - labels.append(trim_text(l.get_text())) - i = i + 1 - if i == 12: # 13レコード目以降は重複しているので skip - break - - # 料金 取得 - i = 0 - for l in price_fields: - prices.append(trim_text(l.get_text())) - i = i + 1 - if i == 12: # 13レコード目以降は重複しているので skip - break - - # 支払い状態 取得 - i = 0 - for l in billing_done_field: - billing_done.append(trim_text(l.get_text())) - i = i + 1 - if i == 12: # 13レコード目以降は重複しているので skip - break - - records = [] - for i in range(12): - records.append([labels[i], prices[i], billing_done[i]]) - - print(records) - return records diff --git a/src/nicigas/writer.py b/src/nicigas/writer.py deleted file mode 100644 index fcc821c..0000000 --- a/src/nicigas/writer.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime as dt -import os -SAVE_DIR = '/data/' - -import csv -def csvwrite_invoice(data): - today = dt.date.today() #出力:datetime.date(2020, 3, 22) - yyyymm = '{0:%Y%m}'.format(today) # 202003 - yyyymmdd = '{0:%Y%m%d}'.format(today) # 20200322 - os.makedirs(SAVE_DIR + yyyymm, exist_ok=True) - - csv_file = open(SAVE_DIR + yyyymm + '/' + yyyymmdd + '.csv', 'wt', newline = '', encoding = 'utf-8') - csv_write = csv.writer(csv_file) - for d in data: - csv_write.writerow(d) diff --git a/src/remix/main.py b/src/remix/main.py deleted file mode 100644 index 25e84b0..0000000 --- a/src/remix/main.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -import csv -import time -import os -import sys -import driver -from venv import create -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.chrome.options import Options -from selenium.webdriver.chrome.service import Service -from bs4 import BeautifulSoup -import remix -import writer - -if __name__ == "__main__": - print("fetcher start") - args = sys.argv - - remix_fetch_data = [] - driver = driver.get_driver() - driver.implicitly_wait(10) - - print("Get driver") - - remix.login(driver) - if len(args) >= 2 and args[1] == 'invoice': - data = remix.fetch_invoice(driver) - print("fetcher complete") - print("writer start") - writer.csvwrite_invoice(data) - else: - data = remix.fetch_consume_month(driver) - print("fetcher complete") - print("writer start") - writer.csvwrite(data) - - print("writer end") - print("the program end") diff --git a/src/remix/remix.py b/src/remix/remix.py deleted file mode 100644 index ade089e..0000000 --- a/src/remix/remix.py +++ /dev/null @@ -1,95 +0,0 @@ -from curses import raw -# -*- coding: utf-8 -*- -import csv -import re -import time -import json -import datetime -import os -import driver -from venv import create -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.chrome.options import Options -from selenium.webdriver.chrome.service import Service -from bs4 import BeautifulSoup -from datetime import datetime, timedelta -import datetime - -def login(driver): - driver.get("https://portal.remix-denki.com/index.php") - - login_id = driver.find_element(by=By.XPATH, value='/html/body/form/div/div/div/div/div[2]/div[1]/input') - - login_id.send_keys(os.getenv("remix_id")) - - password_form = driver.find_element(by=By.XPATH, value='/html/body/form/div/div/div/div/div[2]/div[2]/input') - password_form.send_keys(os.getenv("remix_pass")) - - login_button = driver.find_element(by=By.XPATH, value='/html/body/form/div/div/div/div/div[2]/a') - login_button.click() - driver.implicitly_wait(10) - - html = driver.page_source.encode('utf-8') - soup = BeautifulSoup(html, 'html.parser') - return - -def remove_return(text): - return text.replace("\n", "") - -def trim_text(text): - text = text.replace("\n", "") - text = text.replace('\u3000', '') - return text - -def fetch_consume_month(driver): - # [取得年月日, 使用量合計(kWh), 昼時間使用量(kWh), 夜時間使用量(kWh)] - driver.get("https://portal.remix-denki.com/consumption.php") - detail_button = driver.find_element( - by=By.XPATH, value='//*[@id="page-wrapper"]/div[2]/div/div/div[2]/div/table/tbody/tr/td[5]/a' - ) - detail_button.click() - - day_button = driver.find_element( - by=By.XPATH, value='//*[@id="page-wrapper"]/div[3]/div/ul/li[2]/a' - ) - day_button.click() - html = driver.page_source.encode('utf-8') - soup = BeautifulSoup(html, 'html.parser') - - result_data = [] - # セレクタ(タグ:table、クラス:test) - table = soup.find(id="graph_list") - - trs = table.findAll("tr") - - result_data = [] - for tr in trs: - row_data = [] - for cell in tr.findAll(['td', 'th']): - row_data.append(remove_return(cell.get_text())) - result_data.append(row_data) - - print(result_data) - return result_data - -def fetch_invoice(driver): - driver.get("https://portal.remix-denki.com/invoice.php") - - html = driver.page_source.encode('utf-8') - soup = BeautifulSoup(html, 'html.parser') - - # table = soup.find(class="table responsibveTbl") - - trs = soup.findAll("tr") - - result_data = [] - for tr in trs: - row_data = [] - for cell in tr.findAll(['td', 'th']): - row_data.append(remove_return(cell.get_text())) - result_data.append(row_data) - - print(result_data) - return result_data diff --git a/src/remix/writer.py b/src/remix/writer.py deleted file mode 100644 index 92835a4..0000000 --- a/src/remix/writer.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime as dt -import os -SAVE_DIR = '/data/' - -import csv -def csvwrite(data): - today = dt.date.today() #出力:datetime.date(2020, 3, 22) - yyyymm = '{0:%Y%m}'.format(today) # 202003 - yyyymmdd = '{0:%Y%m%d}'.format(today) # 20200322 - os.makedirs(SAVE_DIR + yyyymm, exist_ok=True) - - csv_file = open(SAVE_DIR + yyyymm + '/' + yyyymmdd + '.csv', 'wt', newline = '', encoding = 'utf-8') - csv_write = csv.writer(csv_file) - for d in data: - csv_write.writerow(d) - -def csvwrite_invoice(data): - today = dt.date.today() #出力:datetime.date(2020, 3, 22) - yyyymm = '{0:%Y%m}'.format(today) # 202003 - yyyymmdd = '{0:%Y%m%d}'.format(today) # 20200322 - os.makedirs(SAVE_DIR + yyyymm, exist_ok=True) - - csv_file = open(SAVE_DIR + yyyymm + '/' + yyyymmdd + '_inv.csv', 'wt', newline = '', encoding = 'utf-8') - csv_write = csv.writer(csv_file) - for d in data: - csv_write.writerow(d) - -# if __name__ == "__main__": -# data = [['取得年月日', '使用量合計(kWh)', '昼時間使用量(kWh)', '夜時間使用量(kWh)'], ['2022/12/31', '-', '-', '-'], ['2022/12/30', '-', '-', '-'], ['2022/12/29', '-', '-', '-'], ['2022/12/28', '-', '-', '-'], ['2022/12/27', '-', '-', '-'], ['2022/12/26', '-', '-', '-'], ['2022/12/25', '-', '-', '-'], ['2022/12/24', '-', '-', '-'], ['2022/12/23', '-', '-', '-'], ['2022/12/22', '-', '-', '-'], ['2022/12/21', '-', '-', '-'], ['2022/12/20', '-', '-', '-'], ['2022/12/19', '-', '-', '-'], ['2022/12/18', '-', '-', '-'], ['2022/12/17', '-', '-', '-'], ['2022/12/16', '-', '-', '-'], ['2022/12/15', '-', '-', '-'], ['2022/12/14', '-', '-', '-'], ['2022/12/13', '-', '-', '-'], ['2022/12/12', '-', '-', '-'], ['2022/12/11', '-', '-', '-'], ['2022/12/10', '-', '-', '-'], ['2022/12/09', '-', '-', '-'], ['2022/12/08', '-', '-', '-'], ['2022/12/07', '-', '-', '-'], ['2022/12/06', '-', '-', '-'], ['2022/12/05', '6', '3', '2'], ['2022/12/04', '8', '6', '2'], ['2022/12/03', '6', '3', '3'], ['2022/12/02', '6', '2', '4'], ['2022/12/01', '6', '4', '2']] -# csvwrite(data) diff --git a/src/tokyowater/main.py b/src/tokyowater/main.py deleted file mode 100644 index 3f1a8e6..0000000 --- a/src/tokyowater/main.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -import csv -import time -import os -import sys -import driver -from venv import create -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.chrome.options import Options -from selenium.webdriver.chrome.service import Service -from bs4 import BeautifulSoup -import water -import writer - -if __name__ == "__main__": - print("fetcher start") - args = sys.argv - - water_fetch_data = [] - driver = driver.get_driver() - driver.implicitly_wait(10) - - print("Get driver") - - water.login(driver) - data = water.extract_bill(driver) - print("fetcher complete") - print("writer start") - writer.csvwrite(data) - - print("writer end") - print("the program end") diff --git a/src/tokyowater/water.py b/src/tokyowater/water.py deleted file mode 100644 index d6d296f..0000000 --- a/src/tokyowater/water.py +++ /dev/null @@ -1,69 +0,0 @@ -from curses import raw -# -*- coding: utf-8 -*- -import time -import os -from venv import create -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By -from selenium.webdriver.chrome.options import Options -from selenium.webdriver.chrome.service import Service -from bs4 import BeautifulSoup -from datetime import datetime, timedelta -import datetime - -def login(driver): - driver.get("https://www.suidoapp.waterworks.metro.tokyo.lg.jp/#/login") - - login_id = driver.find_element(by=By.XPATH, value='//*[@id="login-mail"]') - - login_id.send_keys(os.getenv("water_id")) - print(os.getenv("water_id")) - password_form = driver.find_element(by=By.XPATH, value='//*[@id="login-pass"]') - password_form.send_keys(os.getenv("water_pass")) - - login_button = driver.find_element(by=By.XPATH, value='//*[@id="Content"]/div/div/div/div[1]/div/div[2]/form/button') - login_button.click() - - time.sleep(5) - html = driver.page_source.encode('utf-8') - soup = BeautifulSoup(html, 'html.parser') - - return - -def extract_bill(driver): - driver.get("https://www.suidoapp.waterworks.metro.tokyo.lg.jp/#/portal") - html = driver.page_source.encode('utf-8') - soup = BeautifulSoup(html, 'html.parser') - time.sleep(5) - - # 請求期間 - billing_date_field = driver.find_element(by=By.XPATH, value='//*[@id="Content"]/div/div/div/div[2]/div[1]/div[1]/div/p') - print(billing_date_field.get_attribute("textContent")) - # 使用量 - value_field = driver.find_element(by=By.XPATH, value='//*[@id="Content"]/div/div/div/div[2]/div[1]/div[1]/div/div[1]/p[2]/span[1]') - print(value_field.get_attribute("textContent")) - # 利用期間 - usage_term_field = driver.find_element(by=By.XPATH, value='//*[@id="Content"]/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div[1]/p[2]/span') - print(usage_term_field.get_attribute("textContent")) - # 利用量 - usage_amount_field = driver.find_element(by=By.XPATH, value='//*[@id="Content"]/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div[2]/p[2]/span[1]') - print(usage_amount_field.get_attribute("textContent")) - # 内訳(水道) - detail_waterprice_field = driver.find_element(by=By.XPATH, value='//*[@id="Content"]/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div[3]/p[2]/span[1]') - print(detail_waterprice_field.get_attribute("textContent")) - # 内訳(下水道) - detail_sewerprice_field = driver.find_element(by=By.XPATH, value='//*[@id="Content"]/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div[4]/p[2]/span[1]') - print(detail_sewerprice_field.get_attribute("textContent")) - # 現状では1ヶ月分 - ret = [[ - billing_date_field.get_attribute("textContent"), - value_field.get_attribute("textContent"), - usage_term_field.get_attribute("textContent"), - usage_amount_field.get_attribute("textContent"), - detail_waterprice_field.get_attribute("textContent"), - detail_sewerprice_field.get_attribute("textContent") - ]] - print(ret) - - return ret diff --git a/src/tokyowater/writer.py b/src/tokyowater/writer.py deleted file mode 100644 index aff234a..0000000 --- a/src/tokyowater/writer.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime as dt -import os -SAVE_DIR = '/data/' - -import csv -def csvwrite(data): - today = dt.date.today() #出力:datetime.date(2020, 3, 22) - yyyymm = '{0:%Y%m}'.format(today) # 202003 - yyyymmdd = '{0:%Y%m%d}'.format(today) # 20200322 - os.makedirs(SAVE_DIR + yyyymm, exist_ok=True) - - csv_file = open(SAVE_DIR + yyyymm + '/' + yyyymmdd + '.csv', 'wt', newline = '', encoding = 'utf-8') - csv_write = csv.writer(csv_file) - for d in data: - csv_write.writerow(d) diff --git a/test/auremix.html b/test/auremix.html deleted file mode 100644 index dceb99b..0000000 --- a/test/auremix.html +++ /dev/null @@ -1,23 +0,0 @@ -

- 1か月の電気料金の推移 -

日付 使用量 - 電気料金 -
- 11 (土) 8.50 kWh - 111
- 12 (日) 8.20 kWh - 111
- 13 (月) 5.80 kWh - 111
- 14 (火) 4.80 kWh - 111
- 15 (水) 5.80 kWh - 111
- 16 (木) 6.40 kWh - 222
- 17 (金) 6.20 kWh - 222
- 18 (土) 5.80 kWh - 222
- 19 (日) 8.10 kWh - 222
- 20 (月) 5.00 kWh - 222
From 6eb38758ecdac115ffe0a98f05b3da5e65168157 Mon Sep 17 00:00:00 2001 From: azuki774s Date: Sat, 20 Jul 2024 13:15:44 +0900 Subject: [PATCH 2/7] add s3 upload func --- .github/workflows/image-push.yml | 4 +-- Makefile | 4 +-- build/Dockerfile-money-forward | 6 ---- build/Dockerfile-sbi | 6 ---- build/money-forward/Dockerfile | 19 ++++++++++++ build/money-forward/main.sh | 52 ++++++++++++++++++++++++++++++++ build/sbi/Dockerfile | 18 +++++++++++ build/sbi/main.sh | 50 ++++++++++++++++++++++++++++++ deployment/compose.yml | 22 ++++++++++++-- deployment/sbi-token.env.sample | 8 +++++ 10 files changed, 170 insertions(+), 19 deletions(-) delete mode 100644 build/Dockerfile-money-forward delete mode 100644 build/Dockerfile-sbi create mode 100644 build/money-forward/Dockerfile create mode 100644 build/money-forward/main.sh create mode 100644 build/sbi/Dockerfile create mode 100644 build/sbi/main.sh create mode 100644 deployment/sbi-token.env.sample diff --git a/.github/workflows/image-push.yml b/.github/workflows/image-push.yml index fdc3f59..c84340e 100644 --- a/.github/workflows/image-push.yml +++ b/.github/workflows/image-push.yml @@ -42,7 +42,7 @@ jobs: uses: docker/build-push-action@v2 with: context: . - file: ./build/Dockerfile-sbi + file: ./build/sbi/Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} @@ -82,6 +82,6 @@ jobs: uses: docker/build-push-action@v2 with: context: . - file: ./build/Dockerfile-money-forward + file: ./build/money-forward/Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} diff --git a/Makefile b/Makefile index 54449f6..51c85ca 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ CONTAINER_NAME_MONEY_FORWARD=bill-fetcher-money-forward .PHONY: build start stop clean build: - docker build -t $(CONTAINER_NAME_SBI) -f build/Dockerfile-sbi . - docker build -t $(CONTAINER_NAME_MONEY_FORWARD) -f build/Dockerfile-money-forward . + docker build -t $(CONTAINER_NAME_SBI) -f build/sbi/Dockerfile . + docker build -t $(CONTAINER_NAME_MONEY_FORWARD) -f build/money-forward/Dockerfile . start: docker compose -f deployment/compose.yml up -d diff --git a/build/Dockerfile-money-forward b/build/Dockerfile-money-forward deleted file mode 100644 index 40aeccd..0000000 --- a/build/Dockerfile-money-forward +++ /dev/null @@ -1,6 +0,0 @@ -FROM ghcr.io/azuki774/selenium-chrome:0.2.0 -COPY requirements/ /tmp/ -RUN pip install --upgrade pip && pip install -r /tmp/moneyforward_requirements.txt - -COPY src/moneyforward/ /src/ -ENTRYPOINT ["python3", "-u", "/src/main.py"] diff --git a/build/Dockerfile-sbi b/build/Dockerfile-sbi deleted file mode 100644 index e30c5de..0000000 --- a/build/Dockerfile-sbi +++ /dev/null @@ -1,6 +0,0 @@ -FROM ghcr.io/azuki774/selenium-chrome:latest - -COPY requirements/ /tmp/ -RUN pip install --upgrade pip && pip install -r /tmp/sbi_requirements.txt -COPY src/sbi/ /src/ -ENTRYPOINT ["python3", "-u", "/src/main.py"] diff --git a/build/money-forward/Dockerfile b/build/money-forward/Dockerfile new file mode 100644 index 0000000..eba58bb --- /dev/null +++ b/build/money-forward/Dockerfile @@ -0,0 +1,19 @@ +FROM ghcr.io/azuki774/selenium-chrome:0.2.0 + +# Required Packages +RUN apt-get update && \ + apt-get install -y curl unzip && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# AWS Setup +RUN curl -o /var/tmp/awscli.zip https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip && \ + unzip -d /usr/local/bin/ /var/tmp/awscli.zip + +COPY requirements/ /tmp/ +RUN pip install --upgrade pip && pip install -r /tmp/moneyforward_requirements.txt +COPY --chmod=755 build/money-forward/main.sh /src/main.sh +COPY src/moneyforward/ /src/ + +ENTRYPOINT ["/src/main.sh"] + diff --git a/build/money-forward/main.sh b/build/money-forward/main.sh new file mode 100644 index 0000000..2828b3d --- /dev/null +++ b/build/money-forward/main.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -e +YYYYMM=`date '+%Y%m'` +YYYYMMDD=`date '+%Y%m%d'` + +# BUCKET_URL # from env (ex: "https://s3.ap-northeast-1.wasabisys.com") +# BUCKET_NAME # from env (ex: hoge-system-stg-bucket) +# BUCKET_DIR # from env (ex: fetcher/money-forward) +# AWS_REGION # from env (ex: ap-northeast-1) +# AWS_ACCESS_KEY_ID # from env +# AWS_SECRET_ACCESS_KEY # from env + +AWS_BIN="/usr/local/bin/aws/dist/aws" +DATA_DIR="/data" + +REMOTE_DIR_DAILY="${BUCKET_DIR}/${YYYYMMDD}" +REMOTE_DIR_LATEST="${BUCKET_DIR}/latest" + +function fetch () { + echo "fetcher start" + python3 -u /src/main.py + echo "fetcher complete" +} + +function create_s3_credentials { + echo "s3 credentials create start" + mkdir -p ~/.aws/ + + echo "[default]" >> ~/.aws/config + echo "region = ${AWS_REGION}" >> ~/.aws/config + + echo "[default]" >> ~/.aws/credentials + echo "aws_access_key_id = ${AWS_ACCESS_KEY_ID}" >> ~/.aws/credentials + echo "aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}" >> ~/.aws/credentials + + chmod 400 ~/.aws/config + chmod 400 ~/.aws/credentials + ls -la ~/.aws/ + echo "s3 credentials create complete" +} + +function s3_upload () { + echo "s3 upload start" + ${AWS_BIN} s3 cp ${DATA_DIR}/${YYYYMMDD}/ "s3://${BUCKET_NAME}/${REMOTE_DIR_DAILY}" --recursive --endpoint-url="${BUCKET_URL}" + mv ${DATA_DIR}/${YYYYMMDD} ${DATA_DIR}/latest + ${AWS_BIN} s3 cp ${DATA_DIR}/latest/ "s3://${BUCKET_NAME}/${REMOTE_DIR_LATEST}" --recursive --endpoint-url="${BUCKET_URL}" + echo "s3 upload complete" +} + +fetch +create_s3_credentials +s3_upload diff --git a/build/sbi/Dockerfile b/build/sbi/Dockerfile new file mode 100644 index 0000000..ded5532 --- /dev/null +++ b/build/sbi/Dockerfile @@ -0,0 +1,18 @@ +FROM ghcr.io/azuki774/selenium-chrome:0.2.0 + +# Required Packages +RUN apt-get update && \ + apt-get install -y curl unzip && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# AWS Setup +RUN curl -o /var/tmp/awscli.zip https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip && \ + unzip -d /usr/local/bin/ /var/tmp/awscli.zip + +COPY requirements/ /tmp/ +RUN pip install --upgrade pip && pip install -r /tmp/sbi_requirements.txt +COPY --chmod=755 build/sbi/main.sh /src/main.sh +COPY src/sbi/ /src/ + +ENTRYPOINT ["/src/main.sh"] diff --git a/build/sbi/main.sh b/build/sbi/main.sh new file mode 100644 index 0000000..e70d6e8 --- /dev/null +++ b/build/sbi/main.sh @@ -0,0 +1,50 @@ +#!/bin/bash +set -e +YYYYMM=`date '+%Y%m'` +YYYYMMDD=`date '+%Y%m%d'` + +# BUCKET_URL # from env (ex: "https://s3.ap-northeast-1.wasabisys.com") +# BUCKET_NAME # from env (ex: hoge-system-stg-bucket) +# BUCKET_DIR # from env (ex: fetcher/sbi) +# AWS_REGION # from env (ex: ap-northeast-1) +# AWS_ACCESS_KEY_ID # from env +# AWS_SECRET_ACCESS_KEY # from env + +AWS_BIN="/usr/local/bin/aws/dist/aws" +DATA_DIR="/data" + +REMOTE_DIR="${BUCKET_DIR}/${YYYYMM}" + +function fetch () { + echo "fetcher start" + python3 -u /src/main.py + echo "fetcher complete" +} + +function create_s3_credentials { + echo "s3 credentials create start" + mkdir -p ~/.aws/ + + echo "[default]" >> ~/.aws/config + echo "region = ${AWS_REGION}" >> ~/.aws/config + + echo "[default]" >> ~/.aws/credentials + echo "aws_access_key_id = ${AWS_ACCESS_KEY_ID}" >> ~/.aws/credentials + echo "aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}" >> ~/.aws/credentials + + chmod 400 ~/.aws/config + chmod 400 ~/.aws/credentials + ls -la ~/.aws/ + echo "s3 credentials create complete" +} + +function s3_upload () { + echo "s3 upload start" + ${AWS_BIN} s3 cp ${DATA_DIR}/${YYYYMM}/ "s3://${BUCKET_NAME}/${REMOTE_DIR}" --recursive --endpoint-url="${BUCKET_URL}" + echo "s3 upload complete" +} + +fetch +create_s3_credentials + +s3_upload diff --git a/deployment/compose.yml b/deployment/compose.yml index 0e72bf5..6b1da5d 100644 --- a/deployment/compose.yml +++ b/deployment/compose.yml @@ -9,10 +9,26 @@ services: # volumes: # - /dev/shm:/dev/shm - money-forward: + # money-forward: + # image: bill-fetcher-money-forward + # container_name: bill-fetcher-money-forward + # env_file: + # - money-forward.env + # volumes: + # - ./:/data/ + + # fetcher-sbi: + # image: bill-fetcher-sbi + # container_name: bill-fetcher-sbi + # env_file: + # - sbi-token.env + # volumes: + # - ./:/data/ + + fetcher-money-forward: image: bill-fetcher-money-forward container_name: bill-fetcher-money-forward env_file: - - money-forward.env + - money-forward.env volumes: - - ./:/data/ + - ./:/data/ diff --git a/deployment/sbi-token.env.sample b/deployment/sbi-token.env.sample new file mode 100644 index 0000000..dd4e362 --- /dev/null +++ b/deployment/sbi-token.env.sample @@ -0,0 +1,8 @@ +sbi_user=xxxxxxxxxx +sbi_pass="yyyyyyyyy" +BUCKET_URL="https://s3.ap-northeast-1.wasabisys.com" +BUCKET_NAME="hoge-system-stg-bucket" +BUCKET_DIR="fetcher/sbi" +AWS_REGION="ap-northeast-1" +AWS_ACCESS_KEY_ID="xxxxxxxxxxxxx" +AWS_SECRET_ACCESS_KEY="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" From 5dff8a9655df9f5c2ec93db336e2585032eac999 Mon Sep 17 00:00:00 2001 From: azuki774s Date: Sat, 20 Jul 2024 13:20:46 +0900 Subject: [PATCH 3/7] remove white space --- build/money-forward/Dockerfile | 1 - build/sbi/main.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/build/money-forward/Dockerfile b/build/money-forward/Dockerfile index eba58bb..c32bf3a 100644 --- a/build/money-forward/Dockerfile +++ b/build/money-forward/Dockerfile @@ -16,4 +16,3 @@ COPY --chmod=755 build/money-forward/main.sh /src/main.sh COPY src/moneyforward/ /src/ ENTRYPOINT ["/src/main.sh"] - diff --git a/build/sbi/main.sh b/build/sbi/main.sh index e70d6e8..13e0d2f 100644 --- a/build/sbi/main.sh +++ b/build/sbi/main.sh @@ -46,5 +46,4 @@ function s3_upload () { fetch create_s3_credentials - s3_upload From 154999dc316a39ebb3ce4753741628e0d0ab566b Mon Sep 17 00:00:00 2001 From: azuki774s Date: Sat, 20 Jul 2024 13:24:05 +0900 Subject: [PATCH 4/7] not upload to s3 if no set BUCKET_NAME --- build/money-forward/main.sh | 5 +++++ build/sbi/main.sh | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/build/money-forward/main.sh b/build/money-forward/main.sh index 2828b3d..1e3fff7 100644 --- a/build/money-forward/main.sh +++ b/build/money-forward/main.sh @@ -48,5 +48,10 @@ function s3_upload () { } fetch + +if [ -z $BUCKET_NAME]; then + exit 0 +fi + create_s3_credentials s3_upload diff --git a/build/sbi/main.sh b/build/sbi/main.sh index 13e0d2f..d83c763 100644 --- a/build/sbi/main.sh +++ b/build/sbi/main.sh @@ -45,5 +45,10 @@ function s3_upload () { } fetch + +if [ -z $BUCKET_NAME]; then + exit 0 +fi + create_s3_credentials s3_upload From 3aba66e48288159de23f0b623018eba8a493fe14 Mon Sep 17 00:00:00 2001 From: azuki774s Date: Sat, 20 Jul 2024 13:29:17 +0900 Subject: [PATCH 5/7] somefix --- build/money-forward/main.sh | 2 +- build/sbi/main.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/money-forward/main.sh b/build/money-forward/main.sh index 1e3fff7..0b3958a 100644 --- a/build/money-forward/main.sh +++ b/build/money-forward/main.sh @@ -49,7 +49,7 @@ function s3_upload () { fetch -if [ -z $BUCKET_NAME]; then +if [ -z $BUCKET_NAME ]; then exit 0 fi diff --git a/build/sbi/main.sh b/build/sbi/main.sh index d83c763..c623186 100644 --- a/build/sbi/main.sh +++ b/build/sbi/main.sh @@ -46,7 +46,7 @@ function s3_upload () { fetch -if [ -z $BUCKET_NAME]; then +if [ -z $BUCKET_NAME ]; then exit 0 fi From 0d79ccdb3586a5f4ab2947ac35969a2fa19fed8d Mon Sep 17 00:00:00 2001 From: azuki774s Date: Sat, 20 Jul 2024 15:59:58 +0900 Subject: [PATCH 6/7] doc: refresh reload --- README.md | 8 ++++++-- deployment/compose.yml | 18 +++++------------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index f1bbd78..b734abf 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,14 @@ ## money-forward - https://moneyforward.com に自動的にログインして、指定したURLのHTMLソースを取得して保存する。 -### Usage -- `deploymments/compose.yml` と `money-forward.yml` の要領で、コンテナ `bill-fetcher-money-forward` を起動させる。 +- 出力先は、コンテナ内の `/data/latest/<各種ページ> - 取得したいリンクと、必要に応じて金融機関連携の「更新」ボタンの XPATH を環境変数で渡す。 +## sbi +- https://site1.sbisec.co.jp/ETGate/ に自動的にログインして、ポートフォリオの表ごとに保存する。 +- 出力先は、コンテナ内の `/data/YYYYMMDD/YYYYMMDD_x.csv` + - `x`: 連番 + ## データ取り込み例 - [mf-importer](https://github.com/azuki774/mf-importer) diff --git a/deployment/compose.yml b/deployment/compose.yml index 6b1da5d..0644539 100644 --- a/deployment/compose.yml +++ b/deployment/compose.yml @@ -17,18 +17,10 @@ services: # volumes: # - ./:/data/ - # fetcher-sbi: - # image: bill-fetcher-sbi - # container_name: bill-fetcher-sbi - # env_file: - # - sbi-token.env - # volumes: - # - ./:/data/ - - fetcher-money-forward: - image: bill-fetcher-money-forward - container_name: bill-fetcher-money-forward + fetcher-sbi: + image: bill-fetcher-sbi + container_name: bill-fetcher-sbi env_file: - - money-forward.env + - sbi-token.env volumes: - - ./:/data/ + - ./:/data/ From cdd7c82d34ed38f797f02cc5d2fdf9a6dd0a2a5d Mon Sep 17 00:00:00 2001 From: azuki774s Date: Sat, 20 Jul 2024 16:04:36 +0900 Subject: [PATCH 7/7] add github actions --- .github/workflows/image-push.yml | 18 +++++++++--------- .github/workflows/test.yml | 13 +++++++++++++ 2 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/image-push.yml b/.github/workflows/image-push.yml index c84340e..e119ebf 100644 --- a/.github/workflows/image-push.yml +++ b/.github/workflows/image-push.yml @@ -12,11 +12,11 @@ jobs: IMAGE_NAME: bill-fetcher-sbi steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set meta id: meta - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v4 with: # list of Docker images to use as base name for tags images: | @@ -29,17 +29,17 @@ jobs: type=semver,pattern=latest - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GH_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: context: . file: ./build/sbi/Dockerfile @@ -52,11 +52,11 @@ jobs: IMAGE_NAME: bill-fetcher-money-forward steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set meta id: meta - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v4 with: # list of Docker images to use as base name for tags images: | @@ -69,7 +69,7 @@ jobs: type=semver,pattern=latest - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to GitHub Container Registry uses: docker/login-action@v1 @@ -79,7 +79,7 @@ jobs: password: ${{ secrets.GH_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: context: . file: ./build/money-forward/Dockerfile diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..5877267 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,13 @@ +name: Build test + +on: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v4 + - name: Build images + run: make build