Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
21 changes: 0 additions & 21 deletions .github/workflows/build-from-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,27 +40,6 @@ jobs:
dockerfile: ./govtool/metadata-validation/Dockerfile
image: ghcr.io/${{ github.repository }}-metadata-validation
qovery_container_name: govtool-metadata-validation
- branch: main
network: pre-prod-govtool
workdir: ./govtool/backend
name: govtool-backend
dockerfile: ./govtool/backend/Dockerfile.qovery
image: ghcr.io/${{ github.repository }}-backend
qovery_container_name: govtool-backend
- branch: main
network: pre-prod-govtool
workdir: ./govtool/frontend
name: govtool-frontend
dockerfile: ./govtool/frontend/Dockerfile.qovery
image: ghcr.io/${{ github.repository }}-frontend
qovery_container_name: govtool-frontend
- branch: main
network: pre-prod-govtool
workdir: ./govtool/metadata-validation
name: govtool-metadata-validation
dockerfile: ./govtool/metadata-validation/Dockerfile
image: ghcr.io/${{ github.repository }}-metadata-validation
qovery_container_name: govtool-metadata-validation
- branch: main
network: prod-govtool
workdir: ./govtool/backend
Expand Down
149 changes: 73 additions & 76 deletions .github/workflows/build-from-test.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
name: Check and Build QA

on:
push:
branches:
- test
workflow_dispatch:

permissions:
Expand Down Expand Up @@ -131,80 +128,80 @@ jobs:
CLEAN_NETWORK=$(echo "${{ matrix.network }}" | sed 's/-govtool$//')
echo "CLEAN_NETWORK=$CLEAN_NETWORK" >> $GITHUB_ENV

- name: Build Docker image
uses: docker/build-push-action@v5
with:
context: ${{ matrix.workdir }}
file: ${{ matrix.dockerfile }}
tags: >
${{ steps.image_lowercase.outputs.lowercase }}-${{ env.CLEAN_NETWORK }}:${{ env.COMMIT_TAG }},
${{ steps.image_lowercase.outputs.lowercase }}-${{ env.CLEAN_NETWORK }}:${{ env.STATIC_TAG }}
load: false
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
outputs: type=docker,dest=/tmp/image-${{ matrix.name }}-${{ env.ENVIRONMENT }}.tar
build-args: |
VITE_APP_ENV=${{ secrets.VITE_APP_ENV }}
VITE_BASE_URL=${{ secrets.VITE_BASE_URL }}
VITE_METADATA_API_URL=${{ secrets.VITE_METADATA_API_URL }}
VITE_NETWORK_FLAG=${{ secrets.VITE_NETWORK_FLAG }}
VITE_SENTRY_DSN=${{ secrets.VITE_SENTRY_DSN }}
VITE_USERSNAP_SPACE_API_KEY=${{ secrets.VITE_USERSNAP_SPACE_API_KEY }}
VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED=${{ secrets.VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED }}
VITE_IS_GOVERNANCE_OUTCOMES_PILLAR_ENABLED=${{ secrets.VITE_IS_GOVERNANCE_OUTCOMES_PILLAR_ENABLED }}
VITE_OUTCOMES_API_URL=${{secrets.VITE_OUTCOMES_API_URL}}
VITE_PDF_API_URL=${{ secrets.VITE_PDF_API_URL }}
VITE_IPFS_GATEWAY=${{ secrets.IPFS_GATEWAY }}
VITE_IPFS_PROJECT_ID=${{ secrets.IPFS_PROJECT_ID }}
IPFS_GATEWAY=${{ secrets.IPFS_GATEWAY }}
IPFS_PROJECT_ID=${{ secrets.IPFS_PROJECT_ID }}

- name: Login to GHCR
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Scan Docker image with Dockle
id: dockle
run: |
wget -q https://github.com/goodwithtech/dockle/releases/download/v0.4.14/dockle_0.4.14_Linux-64bit.tar.gz
tar zxf dockle_0.4.14_Linux-64bit.tar.gz
sudo mv dockle /usr/local/bin

dockle --exit-code 1 --exit-level fatal --format json -ak GHC_RELEASE_KEY -ak CABAL_INSTALL_RELEASE_KEY -ak STACK_RELEASE_KEY -ak KEY_SHA512 --input '/tmp/image-${{ matrix.name }}-${{ env.ENVIRONMENT }}.tar' --output ${{ matrix.workdir }}/dockle_scan_output.json
echo " dockle exited w/ $?"
cat ${{ matrix.workdir }}/dockle_scan_output.json

echo "outcome=success" >> $GITHUB_OUTPUT

- name: Debug TAG Before Docker Push
run: |
echo "Lowercase Image: ${{ steps.image_lowercase.outputs.lowercase }}"
echo "Network: ${{ matrix.network }}"
echo "COMMIT_TAG: ${{ env.COMMIT_TAG }}"
echo "STATIC_TAG: ${{ env.STATIC_TAG }}"
echo "Final Docker Tag: ${{ steps.image_lowercase.outputs.lowercase }}-${{ matrix.network}}:${{ env.TAG }}"
# - name: Build Docker image
# uses: docker/build-push-action@v5
# with:
# context: ${{ matrix.workdir }}
# file: ${{ matrix.dockerfile }}
# tags: >
# ${{ steps.image_lowercase.outputs.lowercase }}-${{ env.CLEAN_NETWORK }}:${{ env.COMMIT_TAG }},
# ${{ steps.image_lowercase.outputs.lowercase }}-${{ env.CLEAN_NETWORK }}:${{ env.STATIC_TAG }}
# load: false
# cache-from: type=local,src=/tmp/.buildx-cache
# cache-to: type=local,dest=/tmp/.buildx-cache
# outputs: type=docker,dest=/tmp/image-${{ matrix.name }}-${{ env.ENVIRONMENT }}.tar
# build-args: |
# VITE_APP_ENV=${{ secrets.VITE_APP_ENV }}
# VITE_BASE_URL=${{ secrets.VITE_BASE_URL }}
# VITE_METADATA_API_URL=${{ secrets.VITE_METADATA_API_URL }}
# VITE_NETWORK_FLAG=${{ secrets.VITE_NETWORK_FLAG }}
# VITE_SENTRY_DSN=${{ secrets.VITE_SENTRY_DSN }}
# VITE_USERSNAP_SPACE_API_KEY=${{ secrets.VITE_USERSNAP_SPACE_API_KEY }}
# VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED=${{ secrets.VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED }}
# VITE_IS_GOVERNANCE_OUTCOMES_PILLAR_ENABLED=${{ secrets.VITE_IS_GOVERNANCE_OUTCOMES_PILLAR_ENABLED }}
# VITE_OUTCOMES_API_URL=${{secrets.VITE_OUTCOMES_API_URL}}
# VITE_PDF_API_URL=${{ secrets.VITE_PDF_API_URL }}
# VITE_IPFS_GATEWAY=${{ secrets.IPFS_GATEWAY }}
# VITE_IPFS_PROJECT_ID=${{ secrets.IPFS_PROJECT_ID }}
# IPFS_GATEWAY=${{ secrets.IPFS_GATEWAY }}
# IPFS_PROJECT_ID=${{ secrets.IPFS_PROJECT_ID }}

# - name: Login to GHCR
# uses: docker/login-action@v2
# with:
# registry: ghcr.io
# username: ${{ github.actor }}
# password: ${{ secrets.GITHUB_TOKEN }}

# - name: Scan Docker image with Dockle
# id: dockle
# run: |
# wget -q https://github.com/goodwithtech/dockle/releases/download/v0.4.14/dockle_0.4.14_Linux-64bit.tar.gz
# tar zxf dockle_0.4.14_Linux-64bit.tar.gz
# sudo mv dockle /usr/local/bin

# dockle --exit-code 1 --exit-level fatal --format json -ak GHC_RELEASE_KEY -ak CABAL_INSTALL_RELEASE_KEY -ak STACK_RELEASE_KEY -ak KEY_SHA512 --input '/tmp/image-${{ matrix.name }}-${{ env.ENVIRONMENT }}.tar' --output ${{ matrix.workdir }}/dockle_scan_output.json
# echo " dockle exited w/ $?"
# cat ${{ matrix.workdir }}/dockle_scan_output.json

# echo "outcome=success" >> $GITHUB_OUTPUT

# - name: Debug TAG Before Docker Push
# run: |
# echo "Lowercase Image: ${{ steps.image_lowercase.outputs.lowercase }}"
# echo "Network: ${{ matrix.network }}"
# echo "COMMIT_TAG: ${{ env.COMMIT_TAG }}"
# echo "STATIC_TAG: ${{ env.STATIC_TAG }}"
# echo "Final Docker Tag: ${{ steps.image_lowercase.outputs.lowercase }}-${{ matrix.network}}:${{ env.TAG }}"

- name: Push Docker image to GHCR
run: |
docker load -i '/tmp/image-${{ matrix.name }}-${{ env.ENVIRONMENT }}.tar'
rm -rf '/tmp/image-${{ matrix.name }}-${{ env.ENVIRONMENT }}.tar'
docker push ${{ steps.image_lowercase.outputs.lowercase }}-${{ env.CLEAN_NETWORK}}:${{ env.COMMIT_TAG }}

- name: Sleep for 20 Seconds
run: sleep 20

- name: Notify Qovery of new image tag
run: |
curl -i -X POST https://api.qovery.com/organization/${{ secrets.QOVERY_ORG_ID }}/container/deploy \
-H "Authorization: Token ${{ secrets.QOVERY_API_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"image_name": "intersectmbo/${{ matrix.name }}-${{ env.CLEAN_NETWORK }}",
"tag": "${{ env.COMMIT_TAG }}"
}'
# - name: Push Docker image to GHCR
# run: |
# docker load -i '/tmp/image-${{ matrix.name }}-${{ env.ENVIRONMENT }}.tar'
# rm -rf '/tmp/image-${{ matrix.name }}-${{ env.ENVIRONMENT }}.tar'
# docker push ${{ steps.image_lowercase.outputs.lowercase }}-${{ env.CLEAN_NETWORK}}:${{ env.COMMIT_TAG }}

# - name: Sleep for 20 Seconds
# run: sleep 20

# - name: Notify Qovery of new image tag
# run: |
# curl -i -X POST https://api.qovery.com/organization/${{ secrets.QOVERY_ORG_ID }}/container/deploy \
# -H "Authorization: Token ${{ secrets.QOVERY_API_TOKEN }}" \
# -H "Content-Type: application/json" \
# -d '{
# "image_name": "intersectmbo/${{ matrix.name }}-${{ env.CLEAN_NETWORK }}",
# "tag": "${{ env.COMMIT_TAG }}"
# }'

- name: Add tag as a PR comment
uses: ubie-oss/comment-to-merged-pr-action@v0.3.3
Expand Down
22 changes: 11 additions & 11 deletions CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# GovTool Project Codeowners

# These owners will be the default owners for everything in the repository.
* @Ryun1 @MSzalowski
* @Ryun1 @aaboyle878

# Frontend assets templates
govtool/frontend/* @MSzalowski
*.tsx @MSzalowski
*.ts @MSzalowski
*.css @MSzalowski
govtool/frontend/*
*.tsx
*.ts
*.css

# Backend
govtool/backend/* @MSzalowski @jankun4
govtool/backend/*

# DevOps
.github/workflows/* @placek @adgud
config/govtool/* @placek @adgud
infra/terraform/* @placek @adgud
.github/workflows/*
config/govtool/*
infra/terraform/*

# Testing
tests/* @spannercode @mesudip @kneerose
gov-action-loader/* @spannercode @mesudip @kneerose
tests/*
gov-action-loader/*
7 changes: 4 additions & 3 deletions govtool/backend/src/VVA/API.hs
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,8 @@ listProposals selectedTypes sortMode mPage mPageSize mDrepRaw mSearchQuery = do
proposalsToRemove <- case mDrepRaw of
Nothing -> return []
Just drepId ->
map (voteParamsProposalId . voteResponseVote)
map (\VoteResponse { voteResponseProposal = ProposalResponse { proposalResponseTxHash, proposalResponseIndex } } ->
(proposalResponseTxHash, proposalResponseIndex))
<$> getVotes drepId [] Nothing Nothing

CacheEnv {proposalListCache} <- asks vvaCache
Expand All @@ -444,8 +445,8 @@ listProposals selectedTypes sortMode mPage mPageSize mDrepRaw mSearchQuery = do

mappedSortedAndFilteredProposals <- mapSortAndFilterProposals selectedTypes sortMode proposals
let filteredProposals = filter
( \p@ProposalResponse {proposalResponseId} ->
proposalResponseId `notElem` proposalsToRemove
(\p@ProposalResponse { proposalResponseTxHash, proposalResponseIndex } ->
(proposalResponseTxHash, proposalResponseIndex) `notElem` proposalsToRemove
&& isProposalSearchedFor mSearchQuery p
) mappedSortedAndFilteredProposals

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import {
useTranslation,
} from "@hooks";
import { ValidatedGovernanceVotedOnCard } from "@organisms";
import { getFullGovActionId } from "@utils";

type DashboardGovernanceActionsVotedOnProps = {
searchPhrase?: string;
Expand All @@ -25,41 +24,14 @@ export const DashboardGovernanceActionsVotedOn = ({

const {
data: votes,
areDRepVotesLoading,
isFetching,
areDRepVotesLoading
} = useGetDRepVotesQuery(chosenFilters, chosenSorting, searchPhrase);

// TODO: Filtering here is some kind of craziness. It should be done on the backend.
const filteredData = useMemo(() => {
if (!votes?.length) return [];
if (!searchPhrase) return votes.flatMap((entry) => entry.actions);
const proposals = useMemo(() =>
votes.flatMap((entry) => entry.actions),
[votes, searchPhrase, pendingTransaction.vote]);

const lowerSearch = searchPhrase.toLowerCase();

return votes.flatMap((entry) =>
entry.actions.filter((action) => {
const hash = getFullGovActionId(
action.proposal.txHash,
action.proposal.index,
).toLowerCase();

const title = action.proposal.title?.toLowerCase() || "";
const motivation = action.proposal.motivation?.toLowerCase() || "";
const rationale = action.proposal.rationale?.toLowerCase() || "";
const abstract = action.proposal.abstract?.toLowerCase() || "";

return (
hash.includes(lowerSearch) ||
title.includes(lowerSearch) ||
motivation.includes(lowerSearch) ||
rationale.includes(lowerSearch) ||
abstract.includes(lowerSearch)
);
}),
);
}, [votes, searchPhrase, pendingTransaction.vote]);

return areDRepVotesLoading || isFetching ? (
return areDRepVotesLoading ? (
<Box py={4} display="flex" justifyContent="center">
<CircularProgress />
</Box>
Expand All @@ -69,7 +41,7 @@ export const DashboardGovernanceActionsVotedOn = ({
<Typography py={4} fontWeight="300">
{t("govActions.youHaventVotedYet")}
</Typography>
) : !filteredData?.length ? (
) : !proposals?.length ? (
<Typography py={4} fontWeight="300">
{t("govActions.noResultsForTheSearch")}
</Typography>
Expand All @@ -81,7 +53,7 @@ export const DashboardGovernanceActionsVotedOn = ({
screenWidth < 420 ? "290px" : isMobile ? "324px" : "350px"
}, 1fr))`}
>
{filteredData.map((item) => (
{proposals.map((item) => (
<Box pb={4.25} key={item.proposal.txHash + item.proposal.index}>
<ValidatedGovernanceVotedOnCard
votedProposal={item}
Expand Down
Loading
Loading