Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[USER_OPS_INDEXER] EIP4337 user operations indexer & API server #692

Merged
merged 34 commits into from
Dec 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
81a49a0
feat: initial demo
k1rill-fedoseev Dec 6, 2023
fd67d82
fix: initial review fixes
k1rill-fedoseev Dec 8, 2023
e22acda
fix: filter parser
k1rill-fedoseev Dec 8, 2023
142ba51
chore: refactor page token parsing
k1rill-fedoseev Dec 8, 2023
6dba9ef
feat: remaining endpoints
k1rill-fedoseev Dec 8, 2023
ceb76cc
chore: refactor
k1rill-fedoseev Dec 8, 2023
190c4ec
chore: more improvements
k1rill-fedoseev Dec 8, 2023
e31f3e0
fix: sql error
k1rill-fedoseev Dec 8, 2023
1e42706
feat: simplify migration
k1rill-fedoseev Dec 12, 2023
62b8f3f
chore: best practices refactor
k1rill-fedoseev Dec 12, 2023
3146262
feat: simple retries
k1rill-fedoseev Dec 12, 2023
05f050d
chore: rename to logic
k1rill-fedoseev Dec 12, 2023
fbe7c8b
chore: ci
k1rill-fedoseev Dec 12, 2023
db8e062
feat: simple repo tests
k1rill-fedoseev Dec 12, 2023
bbcb463
chore: lint
k1rill-fedoseev Dec 12, 2023
49cec67
fix: ci db service
k1rill-fedoseev Dec 12, 2023
90914a8
feat: remaining repo tests
k1rill-fedoseev Dec 13, 2023
4eeee2d
feat: tx handler basic test
k1rill-fedoseev Dec 13, 2023
ef53ae0
feat: optional realtime indexer
k1rill-fedoseev Dec 14, 2023
404bc7e
fix: gas limit bug
k1rill-fedoseev Dec 14, 2023
82026d6
fix: bytes json display
k1rill-fedoseev Dec 15, 2023
bdf1140
feat: custom migration table
k1rill-fedoseev Dec 15, 2023
384133d
fix: tests
k1rill-fedoseev Dec 15, 2023
e2c5185
feat: page size cfg
k1rill-fedoseev Dec 15, 2023
5cd099b
chore: adjust fields naming
k1rill-fedoseev Dec 15, 2023
fccad36
chore: minor changes
k1rill-fedoseev Dec 18, 2023
b171911
chore: common db settings
k1rill-fedoseev Dec 19, 2023
1d71661
chore: update env config
k1rill-fedoseev Dec 19, 2023
3cff00f
chore: update cfg
k1rill-fedoseev Dec 19, 2023
a80a13b
chore: fmt
k1rill-fedoseev Dec 19, 2023
f030a52
chore: nit
k1rill-fedoseev Dec 20, 2023
05be7fd
feat: handle_tx db test
k1rill-fedoseev Dec 20, 2023
970ba2e
chore: sort imports
k1rill-fedoseev Dec 20, 2023
68af319
feat: status & fee in user ops list
k1rill-fedoseev Dec 20, 2023
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
157 changes: 157 additions & 0 deletions .github/workflows/user-ops-indexer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
on:
push:
branches:
- 'main'
tags:
- 'user-ops-indexer/v*'
pull_request:
paths:
- user-ops-indexer/**
- .github/workflows/user-ops-indexer.yml
- .github/actions/deps/**


name: Test, lint and docker (user-ops-indexer)

env:
REGISTRY: ghcr.io
IMAGE_NAME: blockscout/user-ops-indexer

defaults:
run:
working-directory: user-ops-indexer

jobs:
test:
name: Unit, doc and integration tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: admin
POSTGRES_USER: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install deps
uses: ./.github/actions/deps

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true

- name: Rust cache
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
workspaces: user-ops-indexer -> target

- name: Unit tests
run: RUST_BACKTRACE=1 RUST_LOG=info cargo test --locked --workspace --all-features --lib --bins -- --nocapture
if: success() || failure()
env:
DATABASE_URL: postgres://postgres:admin@localhost:5432/

- name: Doc tests
run: RUST_BACKTRACE=1 RUST_LOG=info cargo test --locked --workspace --all-features --doc -- --skip proto
if: success() || failure()

# TODO: Uncomment when integration test added
# - name: Integration tests
# run: RUST_BACKTRACE=1 RUST_LOG=info cargo test --locked --workspace --test '*' -- --nocapture
# if: success() || failure()

lint:
name: Linting
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install deps
uses: ./.github/actions/deps

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
components: rustfmt, clippy
override: true

- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
workspaces: user-ops-indexer -> target

- name: cargo fmt
run: cargo fmt --all -- --check --config imports_granularity=Crate

- name: cargo clippy
run: cargo clippy --all --all-targets --all-features -- -D warnings

push:
name: Docker build and docker push
needs:
- test
- lint
if: |
always() &&
(needs.test.result == 'success' || needs.test.result == 'cancelled') &&
(needs.lint.result == 'success' || needs.lint.result == 'cancelled')
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2

- uses: actions-ecosystem/action-regex-match@v2
id: regex
with:
text: ${{ github.ref }}
regex: '^(refs\/tags\/user-ops-indexer\/(v\d+\.\d+\.\d+))|(refs\/heads\/(main))$'

- name: Extract tag name
id: tags_extractor
run: |
t=${{ steps.regex.outputs.group2 }}
m=${{ steps.regex.outputs.group4 }}
(if ! [[ "$t" == "" ]]; then echo tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:$t, ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest; elif ! [[ "$m" == "" ]]; then echo tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:$m; else echo tags=; fi) >> $GITHUB_OUTPUT

- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v3
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Build and push
uses: docker/build-push-action@v2
with:
context: "user-ops-indexer"
file: "user-ops-indexer/Dockerfile"
push: ${{ steps.tags_extractor.outputs.tags != '' }}
tags: ${{ steps.tags_extractor.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:build-cache
cache-to: ${{ github.ref == 'refs/heads/main' && format('type=registry,ref={0}/{1}:build-cache,mode=max', env.REGISTRY, env.IMAGE_NAME) || '' }}
5 changes: 5 additions & 0 deletions user-ops-indexer/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
target
Dockerfile
README.md
tests
config.toml
Loading
Loading