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

feat: versioned feature states #2688

Merged
merged 49 commits into from
Feb 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
16fd566
Initial
kyle-ssg Aug 10, 2023
3737475
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Aug 10, 2023
2f98707
Versioned feature states
kyle-ssg Aug 15, 2023
35bbb5d
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Aug 18, 2023
473f0fc
Merge remote-tracking branch 'origin/feature/versioned_feature_states…
kyle-ssg Aug 18, 2023
b704564
Remove darkmode on logout, fix invite check
kyle-ssg Aug 18, 2023
b3e9291
Feature history
kyle-ssg Aug 18, 2023
7eeeabb
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Aug 28, 2023
97c05e3
Toggle feature, add mv and segment ovverides, view history
kyle-ssg Aug 28, 2023
320b408
Show segment override changes
kyle-ssg Aug 29, 2023
c14dc73
Feature flag toggle feature
kyle-ssg Aug 29, 2023
19dcf50
MV Flags
kyle-ssg Aug 30, 2023
16ee2ee
Always use the feature_segment that comes back with the version's fea…
kyle-ssg Aug 30, 2023
32418f0
Add todo for deleting feature segment
kyle-ssg Aug 30, 2023
3b82b23
Amend FE to use new endpoint
matthewelwell Sep 6, 2023
3ce53d0
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Nov 21, 2023
fe67ed1
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Dec 18, 2023
ead6c83
Adjust feature row and aside logic for versioning
kyle-ssg Dec 18, 2023
396958b
Improve diffs
kyle-ssg Dec 18, 2023
6197b2a
Segment override diffs
kyle-ssg Dec 19, 2023
8c79131
Componentise diffs
kyle-ssg Dec 19, 2023
54b400a
Adjust feature history link logic
kyle-ssg Dec 19, 2023
b11503a
Add Versioning E2E test
kyle-ssg Dec 19, 2023
5690e9c
Add Versioning Local test
kyle-ssg Dec 19, 2023
9d45fee
Fix tests
kyle-ssg Dec 19, 2023
8025f81
Neaten code
kyle-ssg Dec 19, 2023
0aaa368
Neaten code
kyle-ssg Dec 19, 2023
091fff3
Neaten code, remove toggle flag
kyle-ssg Dec 19, 2023
ddd2527
Fix toggle flag
kyle-ssg Dec 19, 2023
5fe4b5e
Fix prop types
kyle-ssg Dec 19, 2023
99c63a1
Remove padding from word diff
kyle-ssg Dec 19, 2023
a70174a
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Dec 20, 2023
0f2766b
Add versioning tests
kyle-ssg Dec 20, 2023
c57c68b
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Jan 10, 2024
0434024
Fix unchanged enabled diff
kyle-ssg Jan 10, 2024
cfaedec
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Jan 10, 2024
2b7a94c
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Jan 11, 2024
0b8bcad
Update versioning to use action tray
kyle-ssg Jan 11, 2024
e238bee
chore: diff change requests (#3192)
kyle-ssg Jan 23, 2024
deb3627
Fix test
kyle-ssg Jan 24, 2024
f9debb6
Fix segment override calculation
kyle-ssg Jan 24, 2024
90e430e
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Jan 25, 2024
1226589
Merge tests
kyle-ssg Jan 25, 2024
7de119d
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Jan 31, 2024
0bd47aa
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Feb 7, 2024
ec1f50d
Fixes
kyle-ssg Feb 7, 2024
ea60a95
Separate history from audit log action links
kyle-ssg Feb 7, 2024
5928f75
Merge branch 'main' into feature/versioned_feature_states
kyle-ssg Feb 15, 2024
46a915b
Update data-test for audit log
kyle-ssg Feb 15, 2024
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
48 changes: 48 additions & 0 deletions .github/workflows/platform-pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,54 @@ jobs:
tests: segment-part-3 signup flag invite project
concurrency: 2

run-e2e-tests-4:
runs-on: ubuntu-latest
name: E2E Local - Versioning

services:
postgres:
image: postgres:11.12-alpine
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: flagsmith
ports: ['5432:5432']
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

steps:
- name: Cloning repo
uses: actions/checkout@v3

- name: Run E2E tests against local
uses: ./.github/actions/local-e2e-tests
with:
slack_token: ${{ secrets.SLACK_TOKEN }}
tests: versioning
concurrency: 1

run-e2e-versioning-tests-docker-unified:
runs-on: ubuntu-latest
name: E2E Unified - Versioning

steps:
- name: Cloning repo
uses: actions/checkout@v3

- name: Build unified docker container
uses: ./.github/actions/unified-e2e-tests
with:
github_actor: ${{github.actor}}
github_token: ${{secrets.GITHUB_TOKEN}}
e2e_test_token_staging: ${{ secrets.E2E_TEST_TOKEN }}

- name: Run tests on unified docker image
working-directory: frontend
env:
SLACK_TOKEN: ${{ inputs.slack_token }}
GITHUB_ACTION_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |
docker compose -f docker-compose-e2e-tests.yml run frontend npx cross-env E2E_CONCURRENCY=1 npm run test -- versioning

run-e2e-segments-1-tests-docker-unified:
runs-on: ubuntu-latest
name: E2E Unified - Segments-1, Environment
Expand Down
1 change: 0 additions & 1 deletion frontend/common/dispatcher/action-constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ const Actions = Object.assign({}, require('./base/_action-constants'), {
'SEARCH_FLAGS': 'SEARCH_FLAGS',
'SELECT_ENVIRONMENT': 'SELECT_ENVIRONMENT',
'SELECT_ORGANISATION': 'SELECT_ORGANISATION',
'TOGGLE_FLAG': 'TOGGLE_FLAG',
'TOGGLE_USER_FLAG': 'TOGGLE_USER_FLAG',
'TWO_FACTOR_LOGIN': 'TWO_FACTOR_LOGIN',
'UPDATE_CHANGE_REQUEST': 'UPDATE_CHANGE_REQUEST',
Expand Down
19 changes: 12 additions & 7 deletions frontend/common/providers/FeatureListProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,18 @@ const FeatureListProvider = class extends React.Component {
})
}

toggleFlag = (i, environments, comment, environmentFlags, projectFlags) => {
AppActions.toggleFlag(
i,
environments,
comment,
environmentFlags,
projectFlags,
toggleFlag = (projectId, environmentId, projectFlag, environmentFlag) => {
AppActions.editEnvironmentFlag(
projectId,
environmentId,
{
...projectFlag,
default_enabled: !environmentFlag.enabled,
},
projectFlag,
environmentFlag,
null,
'VALUE',
)
}

Expand Down
49 changes: 49 additions & 0 deletions frontend/common/services/useEnableFeatureVersioning.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Res } from 'common/types/responses'
import { Req } from 'common/types/requests'
import { service } from 'common/service'

export const featureVersioningService = service
.enhanceEndpoints({ addTagTypes: ['FeatureVersioning'] })
.injectEndpoints({
endpoints: (builder) => ({
enableFeatureVersioning: builder.mutation<
Res['enableFeatureVersioning'],
Req['enableFeatureVersioning']
>({
invalidatesTags: [{ id: 'LIST', type: 'FeatureVersioning' }],
query: (query: Req['enableFeatureVersioning']) => ({
body: query,
method: 'POST',
url: `environments/${query.environmentId}/enable-v2-versioning/`,
}),
}),
// END OF ENDPOINTS
}),
})

export async function enableFeatureVersioning(
store: any,
data: Req['enableFeatureVersioning'],
options?: Parameters<
typeof featureVersioningService.endpoints.enableFeatureVersioning.initiate
>[1],
) {
return store.dispatch(
featureVersioningService.endpoints.enableFeatureVersioning.initiate(
data,
options,
),
)
}
// END OF FUNCTION_EXPORTS

export const {
useEnableFeatureVersioningMutation,
// END OF EXPORTS
} = featureVersioningService

/* Usage examples:
const { data, isLoading } = useGetFeatureVersioningQuery({ id: 2 }, {}) //get hook
const [enableFeatureVersioning, { isLoading, data, isSuccess }] = useEnableFeatureVersioningMutation() //create hook
featureVersioningService.endpoints.getFeatureVersioning.select({id: 2})(store.getState()) //access data from any function
*/
49 changes: 49 additions & 0 deletions frontend/common/services/useFeatureSegment.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Res } from 'common/types/responses'
import { Req } from 'common/types/requests'
import { service } from 'common/service'

export const featureSegmentService = service
.enhanceEndpoints({ addTagTypes: ['FeatureSegment'] })
.injectEndpoints({
endpoints: (builder) => ({
deleteFeatureSegment: builder.mutation<
Res['featureSegment'],
Req['deleteFeatureSegment']
>({
invalidatesTags: [{ id: 'LIST', type: 'FeatureSegment' }],
query: (query: Req['deleteFeatureSegment']) => ({
body: query,
method: 'DELETE',
url: `features/feature-segments/${query.id}/`,
}),
}),
// END OF ENDPOINTS
}),
})

export async function deleteFeatureSegment(
store: any,
data: Req['deleteFeatureSegment'],
options?: Parameters<
typeof featureSegmentService.endpoints.deleteFeatureSegment.initiate
>[1],
) {
return store.dispatch(
featureSegmentService.endpoints.deleteFeatureSegment.initiate(
data,
options,
),
)
}
// END OF FUNCTION_EXPORTS

export const {
useDeleteFeatureSegmentMutation,
// END OF EXPORTS
} = featureSegmentService

/* Usage examples:
const { data, isLoading } = useGetFeatureSegmentQuery({ id: 2 }, {}) //get hook
const [createFeatureSegment, { isLoading, data, isSuccess }] = useCreateFeatureSegmentMutation() //create hook
featureSegmentService.endpoints.getFeatureSegment.select({id: 2})(store.getState()) //access data from any function
*/
Loading
Loading