{"id":21474660,"url":"https://github.com/yagoluiz/juridical-worker","last_synced_at":"2026-04-04T16:34:25.446Z","repository":{"id":43052722,"uuid":"452050087","full_name":"yagoluiz/juridical-worker","owner":"yagoluiz","description":"Juridical worker using .NET 7","archived":false,"fork":false,"pushed_at":"2024-08-03T14:39:45.000Z","size":108,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-23T16:53:05.556Z","etag":null,"topics":["docker","docker-compose","dotnet-7","gcp","k8s","pubsub","terraform","worker"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yagoluiz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-25T21:35:24.000Z","updated_at":"2024-08-03T14:39:48.000Z","dependencies_parsed_at":"2024-08-03T15:59:35.825Z","dependency_job_id":null,"html_url":"https://github.com/yagoluiz/juridical-worker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagoluiz%2Fjuridical-worker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagoluiz%2Fjuridical-worker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagoluiz%2Fjuridical-worker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagoluiz%2Fjuridical-worker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yagoluiz","download_url":"https://codeload.github.com/yagoluiz/juridical-worker/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243996898,"owners_count":20380978,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","dotnet-7","gcp","k8s","pubsub","terraform","worker"],"created_at":"2024-11-23T10:24:26.908Z","updated_at":"2025-12-31T00:18:40.495Z","avatar_url":"https://github.com/yagoluiz.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Juridical Worker\n\n[![juridical-worker-deploy](https://github.com/yagoluiz/juridical-worker/actions/workflows/juridical-worker-deploy.yaml/badge.svg)](https://github.com/yagoluiz/juridical-worker/actions/workflows/juridical-worker-deploy.yaml)\n\nWorker responsible for web scraping and identifying legal processes from the **Projudi** system for the Justice Tribunal of Brazil.\n\n## Environment settings local\n\n### .NET\n\n- Use [dotnet user-secrets](https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets)\n\n1) Get project folder legal process worker:\n\n```bash\nsrc/Juridical.LegalProcess.Worker\n```\n\n2) Create secrets:\n\n```bash\ndotnet user-secrets set \"LEGAL_PROCESS_USER\" \"YOUR_SECRET\"\ndotnet user-secrets set \"LEGAL_PROCESS_PASSWORD\" \"YOUR_SECRET\"\n```\n\n1) Get project folder message worker:\n\n```bash\nsrc/Juridical.Message.Worker\n```\n\n2) Create secrets:\n\n```bash\ndotnet user-secrets set \"MESSAGE_SERVICE_API_TOKEN\" \"YOUR_SECRET\"\ndotnet user-secrets set \"MESSAGE_SERVICE_FROM\" \"YOUR_SECRET\"\ndotnet user-secrets set \"MESSAGE_SERVICE_TO\" \"YOUR_SECRET\"\n```\n\n### Docker\n\n- Create **.env** file\n\n```bash\nPROJECT_ID=juridical-test\nPUBSUB_EMULATOR_HOST=127.0.0.1:8085\nWEB_DRIVER_URI=http://juridical-selenium:4444/wd/hub\nLEGAL_PROCESS_USER=YOUR_SECRET\nLEGAL_PROCESS_PASSWORD=YOUR_SECRET\nMESSAGE_SERVICE_API_TOKEN=YOUR_SECRET\nMESSAGE_SERVICE_FROM=YOUR_SECRET\nMESSAGE_SERVICE_TO=YOUR_SECRET\n```\n\n## Instructions for run project\n\n### Pub/Sub Emulator\n\n1) Run pub/sub emulator:\n\n```bash\ncd emulators/ \u0026\u0026 docker-compose up -d\n```\n\n2) Publish message:\n\n```bash\ndocker exec -it juridical-pubsub-emulator /bin/bash\n```\n\n```bash\npython3 /root/bin/pubsub-client.py publish juridical-test juridical.legal-process.resulted '{\n  \"specversion\": \"1.0\",\n  \"id\": \"542204ea-76c7-4b38-a35d-55440bfa3b6a\",\n  \"type\": \"Juridical.Core.Events.LegalProcessEvent\",\n  \"source\": \"juridical-legal-process-worker\",\n  \"datacontenttype\": \"application/json\",\n  \"time\": \"2023-06-09T14:58:21.6717314-03:00\",\n  \"data\": \"{\\\"processCount\\\":1}\"\n}'\n```\n\n### .NET\n\n1) Run selenium:\n\n```bash\ndocker run -d -p 4444:4444 -p 7900:7900 --shm-size=\"2g\" -e VNC_NO_PASSWORD=1 --name selenium selenium/standalone-chrome:123.0\n```\n\n2) Run projects:\n\n```bash\ncd src/Juridical.LegalProcess.Worker \u0026\u0026 dotnet watch run\n```\n\n```bash\ncd src/Juridical.Message.Worker \u0026\u0026 dotnet watch run\n```\n\n### Docker\n\n- Run project\n\n```bash\ndocker-compose up -d\n```\n\n### Push images (optional)\n\n- Create [Container Registry (GCP)](https://cloud.google.com/container-registry/docs/pushing-and-pulling)\n\n1) Configure auth [GCP CLI](https://cloud.google.com/sdk/gcloud) login:\n\n```bash\ngcloud auth login\n```\n\n2) Configure auth configure docker:\n\n```bash\ngcloud auth configure-docker\n```\n\n3) Push images for private registry:\n\n```bash\ndocker build \\\n  -f ./src/Juridical.LegalProcess.Worker/Dockerfile \\\n  -t juridical/juridical-legal-process-worker:v1 \\\n  ./src/ \u0026\u0026\ndocker tag juridical/juridical-legal-process-worker:v1 us-east1-docker.pkg.dev/$PROJECT_ID/juridical/juridical-legal-process-worker:v1 \u0026\u0026\ndocker push us-east1-docker.pkg.dev/$PROJECT_ID/juridical/juridical-legal-process-worker:v1\n```\n\n```bash\ndocker build \\\n  -f ./src/Juridical.Message.Worker/Dockerfile \\\n  -t juridical/juridical-message-worker:v1 \\\n  ./src/ \u0026\u0026\ndocker tag juridical/juridical-message-worker:v1 us-east1-docker.pkg.dev/$PROJECT_ID/juridical/juridical-message-worker:v1 \u0026\u0026\ndocker push us-east1-docker.pkg.dev/$PROJECT_ID/juridical/juridical-message-worker:v1\n```\n\n## Infrastructure\n\n### Terraform\n\n- Create service account from [GCP](https://cloud.google.com/iam/docs/creating-managing-service-accounts)\n\n1) Create service account:\n\n```bash\ngcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \\\n  --display-name \"$SERVICE_ACCOUNT_DISPLAY_NAME\" --project $PROJECT_ID\n```\n\n2) Get service account email:\n\n```bash\ngcloud iam service-accounts list\n```\n\n3) Create credentials key:\n\n```bash\n# SERVICE_ACCOUNT_CREDENTIALS=~/.config/gcloud/CREDENTIALS_FILE_NAME.json\n\ngcloud iam service-accounts keys create $SERVICE_ACCOUNT_CREDENTIALS \\\n  --iam-account $SERVICE_ACCOUNT_EMAIL\n```\n\n4) Add policy permissions:\n\n```bash\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/storage.admin\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/artifactregistry.admin\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/container.admin\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/iam.serviceAccountUser\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/viewer\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/pubsub.admin\n```\n\n- Run local infrastructure\n\n1) Install [Terraform](https://www.terraform.io/downloads.html) and create GOOGLE_CREDENTIALS variable:\n\n```bash\nexport GOOGLE_CREDENTIALS=~/.config/gcloud/CREDENTIALS_FILE_NAME.json\n```\n\n2) Execute init:\n\n```bash\ncd infra/ \u0026\u0026 terraform init\n```\n\n3) Execute apply:\n\n```bash\nterraform apply \\\n  -var=\"project_id=$PROJECT_ID\" \\\n  -var=\"service_account=$SERVICE_ACCOUNT_EMAIL\"\n```\n\n- (Optional) Create remote backend bucket in Cloud Storage:\n\n1) Create bucket:\n\n```bash\ngsutil mb -p $PROJECT_ID -l $LOCATION -b on gs://$BUCKET_NAME\n```\n\n## Deploy\n\n### GitHub Actions\n\n- Create service account from [GCP](https://cloud.google.com/iam/docs/creating-managing-service-accounts)\n\n1) Create service account:\n\n```bash\ngcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \\\n  --display-name \"$SERVICE_ACCOUNT_DISPLAY_NAME\" --project $PROJECT_ID\n```\n\n2) Enable IAM Credentials:\n\n```bash\ngcloud services enable iamcredentials.googleapis.com --project $PROJECT_ID\n```\n\n3) Get service account email:\n\n```bash\ngcloud iam service-accounts list\n```\n\n4) Add policy permissions:\n\n```bash\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/container.admin\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/storage.admin\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/artifactregistry.admin\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/container.clusterViewer\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/logging.logWriter\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/monitoring.metricWriter\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/stackdriver.resourceMetadata.writer\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n\t--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \\\n\t--role=roles/pubsub.admin\n```\n\n- Enabling keyless authentication from [GitHub Actions GCP](https://cloud.google.com/blog/products/identity-security/enabling-keyless-authentication-from-github-actions)\n\n1) Create Workload Identity pool:\n\n```bash\ngcloud iam workload-identity-pools create \"$POOL_NAME\" \\\n  --project=\"$PROJECT_ID\" \\\n  --location=\"global\" \\\n  --display-name=\"$POOL_DISPLAY_NAME\"\n```\n\n2) Get Workload Identity Id:\n\n```bash\ngcloud iam workload-identity-pools describe \"$POOL_NAME\" \\\n  --project=\"$PROJECT_ID\" \\\n  --location=\"global\" \\\n  --format=\"value(name)\"\n```\n\n3) Create Workload Identity GitHub provider:\n\n```bash\ngcloud iam workload-identity-pools providers create-oidc \"$PROVIDER_NAME\" \\\n  --project=\"$PROJECT_ID\" \\\n  --location=\"global\" \\\n  --workload-identity-pool=\"$POOL_NAME\" \\\n  --display-name=\"$PROVIDER_DISPLAY_NAME\" \\\n  --attribute-mapping=\"google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository\" \\\n  --issuer-uri=\"https://token.actions.githubusercontent.com\n```\n\n4) Create authentications from the Workload Identity provider:\n\n```bash\ngcloud iam service-accounts add-iam-policy-binding \"$SERVICE_ACCOUNT_EMAIL\" \\\n  --project=\"$PROJECT_ID\" \\\n  --role=\"roles/iam.workloadIdentityUser\" \\\n  --member=\"principalSet://iam.googleapis.com/$WORKLOAD_IDENTITY_POOL_ID/attribute.repository/$GITHUB_USER/$GITHUB_REPOSITORY\"\n```\n\n5) Get Workload Identity Provider resource name:\n\n```bash\ngcloud iam workload-identity-pools providers describe \"$PROVIDER_NAME\" \\\n  --project=\"$PROJECT_ID\" \\\n  --location=\"global\" \\\n  --workload-identity-pool=\"$POOL_NAME\" \\\n  --format=\"value(name)\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyagoluiz%2Fjuridical-worker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyagoluiz%2Fjuridical-worker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyagoluiz%2Fjuridical-worker/lists"}